jq - ファイルのオブジェクトをjson配列に追加する

jq - ファイルのオブジェクトをjson配列に追加する

jqを使用して、既存のjsonファイルに要素と値を含む配列を追加したいと思います。

すでにファイル(input.json)があります。

{
  "id": 9,
  "version": 0,
  "lastUpdTs": 1532371267968,
  "name": "Training"
}

このjson(orig.json)の他のグループ配列に追加したいと思います。

[
  {
    "name": "JAYS",
    "sourceConnection": {
      "name": "ORACLE_connection",
      "connectionType": "JDBC",
      "commProtocol": "JDBC"
    },
    "checked": true,
    "newlyAdded": false,
    "id": null,
    "groups": [],
    "displayName": "SCOTT",
    "defaultLevel": "MANAGED"
  }
]

最終結果は次のとおりです。

[
  {
    "name": "JAYS",
    "sourceConnection": {
      "name": "ORACLE_connection",
      "connectionType": "JDBC",
      "commProtocol": "JDBC"
    },
    "checked": true,
    "newlyAdded": false,
    "id": null,
    "groups": [
      {
        "id": 9,
        "version": 0,
        "lastUpdTs": 1532371267968,
        "name": "Training"
      }
    ],
    "displayName": "SCOTT",
    "defaultLevel": "MANAGED"
  }
]

配列に要素を追加する方法を知っていますが、ファイルから要素を渡す方法はわかりません。

jq '.[].groups += [{"INPUT": "HERE"}]' ./orig.json

ベストアンサー1

jq--argjsonそのフラグを使用して実際のJSONコンテンツを提供するためのフラグがあります。あなたがしなければならないのは、最初のJSONファイルの内容をjqコンテキストの変数に保存し、2番目のJSONで更新することです。

jq --argjson groupInfo "$(<input.json)" '.[].groups += [$groupInfo]' orig.json

これは、"$(<input.json)"指定されたファイルの内容を出力し、その引数--argjsonを変数に格納するシェルリダイレクト構成ですgroupInfo。次に、groups実際のフィルタセクションの配列に追加します。

つまり、上記の解決策は次のことと同じです。

jq --argjson groupInfo '{"id": 9,"version": 0,"lastUpdTs": 1532371267968,"name": "Training" }' \
   '.[].groups += [$groupInfo]' orig.json

おすすめ記事