Array

jq - 將文件中的對象添加到 json 數組中

  • January 28, 2021

我想使用 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

jq有一個標誌,用於用它的標誌提供實際的 JSON 內容--argjson。您需要做的是,將第一個 JSON 文件的內容儲存在jq’ 上下文中的變數中,並在第二個 JSON 中更新它

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

該部分"$(<input.json)"是shell重定向構造,用於輸出給定文件的內容,並將其參數--argjson儲存在變數中groupInfo。現在您將它添加到groups實際過濾器部分的數組中。

換句話說,上面的解決方案相當於這樣做

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

引用自:https://unix.stackexchange.com/questions/460985