9

2 つの json ファイルがあり、違いを含む json を取得したいと考えています。一部の要素の順序を変更しても、 コンテンツの実際の違いのみを表示することが重要です。

それを行う最善の方法は何ですか?jsons には大量のデータが含まれている可能性があり、ユーザーはジョブをできるだけ迅速に実行する必要があるため、できるだけ効率的なソリューションを探しています。

注:jsonには、異なる深さでエンコードされたデータが含まれる場合があります。どのプログラミング言語でも構いませんが、php で簡単に実装できる回答を希望します。

4

3 に答える 3

9

array_diff関数を使用してみてください

array_diff(json_decode($jsonData1), json_decode($jsonData2));
于 2013-03-23T19:08:38.023 に答える
6

基本的に、必要なものは に似ていますがarray_diff_assoc、json オブジェクトに適用され、再帰的です。

参照のarray_diff問題により、関数は再帰的ではありません。配列の参照をその配列のエントリに割り当てて、配列を無限に再帰的にすることができます。json オブジェクトで同じ状況が発生する可能性はないと思います。したがって、再帰関数を安全にします。

オブジェクト A と B の差を計算し、結果をオブジェクト C に格納したいとします。原理は、A の各フィールドをループすることです (aが実行するforeach必要があります)。

  • そのようなフィールドは B に存在しません。C にコピーします。
  • 同様のフィールドが B に存在し、A フィールドと B フィールドの差の結果を C に入れます。これは、これらのフィールドをパラメーターとして diff 関数を再帰的に呼び出し、結果の新しいオブジェクトを呼び出します。

A の順序を尊重する必要があります。

于 2013-03-23T19:26:22.817 に答える