2 つの JSON ファイルが辞書キー内およびリスト要素内の順序に関係なく同一であるかどうかを確認するために使用できるコマンド ライン ユーティリティはありますか?
これはできるだろうかjq
または他の同等のツールはありますか?
例:
これら2つのJSONファイルは同一です
A
:
{
"People": ["John", "Bryan"],
"City": "Boston",
"State": "MA"
}
B
:
{
"People": ["Bryan", "John"],
"State": "MA",
"City": "Boston"
}
ただし、これら 2 つの JSON ファイルは異なります。
A
:
{
"People": ["John", "Bryan", "Carla"],
"City": "Boston",
"State": "MA"
}
C
:
{
"People": ["Bryan", "John"],
"State": "MA",
"City": "Boston"
}
それは次のようになります:
$ some_diff_command A.json B.json
$ some_diff_command A.json C.json
The files are not structurally identical
ベストアンサー1
シェルがプロセス置換をサポートしている場合(Bashスタイルは以下を参照)、ドキュメント):
diff <(jq --sort-keys . A.json) <(jq --sort-keys . B.json)
オブジェクトのキー順序は無視されますが、配列順序は依然として重要です。必要に応じて、配列値を他の方法でソートするか、セットのようにすることで (例["foo", "bar"]
→ {"foo": null, "bar": null}
; これによって重複も削除されます)、これを回避できます。
あるいは、必要に応じて、 、 などの他の比較器に置き換えてください。必要diff
なのは yes または no の回答だけであれば、 を使用し、に渡して出力をフォーマットしないことを検討してください。これにより、パフォーマンスがわずかに向上する可能性があります。cmp
colordiff
vimdiff
cmp
--compact-output
jq