nazo6 notememo

Rustのserde_jsonでエラーの発生箇所を知る方法

作成:2023/08/27

更新:2023/08/27

概要

serde_jsonではパースエラー発生時にどのプロパティでエラーが発生したのかわからない

解決策

コード例

Before
let result = serde_json::from_str::<JsonStruct>(&json);
After
let jd = &mut serde_json::Deserializer::from_str(&json);
let result: std::result::Result<JsonStruct, _> = serde_path_to_error::deserialize(jd);

実行例

Before
Failed to parse json: invalid type: integer `880`, expected a string at line 1 column 1572
このようにどこがエラーなのか非常にわかりづらかったのが…
After
Failed to parse json: [0].price: invalid type: integer `880`, expected a string at line 1 column 1572
エラー箇所が出てとても便利になりました