PythonでJSONを比較したいという記事を過去に書きました。しかし、日付項目等々の固定しづらい項目を無視して比較するというユースケースが達成できていませんでした。
今回の記事では、一部項目を無視して比較する方法を記載します。
前提
- Python
- 3.11
- DeepDiff
- 6.3.0
対応
DeepDiffを使用します。
導入
DeepDiffをインストールしてください。
pip install deepdiff pipenv install deepdiff
比較
DeepDiffを使うには、DeepDiffのインスタンスを元に比較します。過去の記事と同様に、json.loadsメソッドを使ってJSONをDict型に変換します。
今回の場合は日付項目のcreatetime, updatetimeを無視するようにするため、DeepDiffのインスタンス作成時にexclude_pathsを渡します。
import json from deepdiff import DeepDiff def test_if_ignore_column_has_diff_then_True(): # GIVEN json_data_1 = """ { "name": "John", "createtime": "2222-01-01T00:11:00Z", "updatetime": "2222-04-10T15:30:00Z" } """ json_data_2 = """ { "name": "John", "createtime": "3333-01-01T00:11:00Z", "updatetime": "3333-04-11T08:00:00Z" } """ dict_1 = json.loads(json_data_1) dict_2 = json.loads(json_data_2) # WHEN actual = DeepDiff(dict_1, dict_2, exclude_paths=["createtime", "updatetime"]) # THEN assert actual == {}
ソースコード
終わりに
なかなかJSONの特定の項目を無視する方法が見つかりませんでした。
DeepDiff自体にはオプションが大量にあったため、細かい比較をする際にも役立ちそうです。2023年4月19日時点で、1.6KのStarもあることからPythonでのJSON比較のスタンダードなのかもしれません。