キー順を無視してJSONを比較する方法
プロパティの順番が異なっていても、2つのJSONオブジェクトは同等になり得ます。テキスト差分は無害な並べ替えも変更と見なしますが、意味比較では無視できます。
オブジェクトと配列では規則が異なる
オブジェクトのプロパティ順には意味がないため、名前で対応付けます。配列では通常、順番に意味があるため、アプリケーションが別の識別ルールを定めていない限り、各値をインデックスに結び付けます。
値を安定したパスに展開する
$.customer.address.city や $.items[2].price のようなパスは、各プリミティブ値に安定した座標を与えます。これらを比較すると、インデントやキー順のノイズなしに追加、削除、値変更を検出できます。
- 最初に両方の文書を解析します。
- オブジェクトキーを決定論的に並べ替えます。
- 配列のインデックスを保持します。
- 生成した各パスの値を比較します。
前処理が必要なケースを把握する
自動生成時刻、リクエストID、順序のない配列には、明示的な除外または並べ替えルールが必要な場合があります。比較前にルールを適用して記録しなければ、結果を再現できません。