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