13

別の方法として、分析に多くの手作業を費やす必要がないように解決したい問題があります。

2 つの JSON オブジェクトがあります (異なる Web サービス API または HTTP 応答から返されます)。2 つの JSON オブジェクト間には交差するデータがあり、類似した JSON 構造を共有していますが、同一ではありません。1 つの JSON (小さい方) は、より大きな JSON オブジェクトのサブセットのようなものです。

2 つのオブジェクト間で交差するすべてのデータを見つけたいと考えています。実際には、各オブジェクトのパラメーター/プロパティの実際の値ではなく、オブジェクト内の共有パラメーター/プロパティにもっと興味があります。最終的に 1 つの JSON 出力からのデータを使用して、API 呼び出しへの入力として他の JSON を構築したいからです。残念ながら、各 API の JSON を定義するドキュメントはありません。:(

これを難しくしているのは、JSON オブジェクトが巨大であることです。Windows のメモ帳で印刷すると、1 ページにまたがります。もう1つは37ページに及びます。API は、1 行に圧縮された JSON 出力を返します。通常のテキスト比較はあまり機能しません。テキスト比較がうまく機能するには、手動で再フォーマットするか、改行などでオブジェクトを分割するスクリプトを使用する必要があります。Beyond Compare ツールで試してみました。

手動で検索/grepを実行できますが、小さなJSON内のすべてのパラメーターを循環させるのは面倒です. それを行うためのコードを書くこともできますが、それを行うためにも時間を費やし、コードが機能するかどうかもテストする必要があります。または、そのための既製のコードがすでにあるかもしれません...

または、JSON 差分タイプのツールを探すこともできます。いくつか検索しました。これらに出くわしました:

https://github.com/samsonjs/json-diffまたはhttps://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

どちらも私が望んでいたことをすることができませんでした。おそらく、JSON が複雑すぎるか大きすぎて処理できません。

最善の解決策について何か考えはありますか?または、現時点での最良の解決策は、各パラメーター/プロパティの grep を使用した手動分析でしょうか?

コード ソリューションに関しては、どの言語でもかまいません。必要なことを実行するパーサーまたは差分ツールが必要です。

申し訳ありませんが、JSON データ構造をあなたと共有することもできません。機密情報と見なされる可能性があります。

4

3 に答える 3

1

私は、単純なJSONのトリックを行う小さな GPL プロジェクトを持っています。ネストされたエンティティのサポートは追加していません。これは単純な ObjectDB ソリューションであり、実際には JSON ではないためです (明らかにそれに触発されたという事実にもかかわらず.

長くて短い API は非常に単純です。新しいグループを作成して入力し、必要な論理パラメーターを介してサブセットを取得します。

https://github.com/danielbchapman/groups

APIは基本的に次のように使用されます->

SubGroup items = group
                  .notEqual("field", "value")
                  .lessThan("field2", 50); //...etc...

実際には、基本的なユニオンと結合がサポートされており、必要なことはほとんど実行できます。

長くても短くても、おそらくデータ型として Set が必要です。比較がおそらく複雑であることを考えると、より複雑なメソッドのセットが必要です。

私の唯一の注意は、それが GPL であるということです。データが機密情報である場合、そのライセンスに関心がない可能性があります。

于 2012-10-09T03:01:26.370 に答える