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比較のスタンダードなのかもしれません。