複数のJSONファイルをマージし、フィールドごとに重複オブジェクトを削除します。

複数のJSONファイルをマージし、フィールドごとに重複オブジェクトを削除します。

数十万のJSONファイルを単一のオブジェクトにマージしようとしています。これの助けを借りて回答すべてのオブジェクトを配列として単一のオブジェクトに正常に追加しました。特定のフィールドまたはパラメータが重複している場合は、マージ中にいくつかのオブジェクトをフィルタリングしたいと思います。field 1同じ値を持つ2つのオブジェクトと同じです。

以下は例です。

入力ファイル1:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

入力ファイル2:

[
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

入力ファイル3:

[
    {
      "field 1": 10,
      "field 2": 20,
      "field 3": 30,
      "field 4": 40
    }
]

予想出力:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    },
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

field 1ファイル3オブジェクトは同じ値のためにマージされません。

答え1

重複項目を削除するには、オブジェクトの配列とフィールド名を入力として使用するunique_by()関数を使用できます。jq

jq -n '[ inputs[] ] | unique_by(."value 1")'

私の他のものに添付回答あるフィールドに基づいて一意の選択を行い、別のフィールドに基づいてオブジェクトを削除するには、次のようにします。次のコードは、重複項目を除いてオブジェクトをグループ化し、"value 1"次を含むオブジェクトを除外します。"value 6"

jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '

関連情報