複数のjsonファイルを共通オブジェクトにマージして1つにまとめる

複数のjsonファイルを共通オブジェクトにマージして1つにまとめる

次の形式のjsonファイルがたくさんあります。

サンプルfile1:

{
  "attributes": [
    {
      "name": "Node",
      "value": "test"
    }
  ]
}

サンプルfile2:

{
  "attributes": [
    {
      "name": "version",
      "value": "11.1"
    }
  ]
}

など。

たとえば、それらをすべて1つのjsonファイルにマージする必要があります。

{
  "attributes": [
    {
      "name": "Node",
      "value": "test"
    },
    {
      "name": "version",
      "value": "11.1"
    }
  ]
}

誰でもjqのソリューションを提供できますか?

ベストアンサー1

jq解決策:

jq -s '{ attributes: map(.attributes[0]) }' file*.json
  • -s( --slurp) - それぞれに対してフィルタを実行する代わりにJSON入力のオブジェクトは、入力ストリーム全体を大きな配列として読み込み、フィルタを一度だけ実行します。

出力例:

{
  "attributes": [
    {
      "name": "Node",
      "value": "test"
    },
    {
      "name": "version",
      "value": "11.1"
    }
  ]
}

おすすめ記事