jq または代替コマンドラインツールを使用して JSON ファイルを比較する 質問する

jq または代替コマンドラインツールを使用して JSON ファイルを比較する 質問する

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 の回答だけであれば、 を使用し、に渡して出力をフォーマットしないことを検討してください。これにより、パフォーマンスがわずかに向上する可能性があります。cmpcolordiffvimdiffcmp--compact-outputjq

おすすめ記事