Array
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
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