Json
將鍵/值添加到 json 對象
我有一個儲存在 shell 變數中的 json 對象
json
:{ "name": "foo", "array": [ { "name": "bar", "thing": true }, { "name": "baz", "thing": false } ] }
我想
new_key
在array
. 我可以執行以下操作:$ jq '.array[] + {"new_key": 0}' <<<"$json" { "name": "bar", "thing": true, "new_key": 0 } { "name": "baz", "thing": false, "new_key": 0 }
但是,這只返回數組數組而不是整個對象。我怎樣才能修改變數或返回整個對象?
$ jq '.array[] += { "new_key": 0 }' <<<"$json" { "name": "foo", "array": [ { "name": "bar", "thing": true, "new_key": 0 }, { "name": "baz", "thing": false, "new_key": 0 } ] }
也就是說,使用
+=
代替+
. 您想要修改array
數組,而不是提取它並添加到它。如果您要添加的數據來自可能需要 JSON 編碼的 shell 變數(
$somevalue
如下),那麼您可以使用它jo
來生成您添加的 JSON 片段:jq --argjson newval "$( jo new_key="$somevalue" )" '.array[] += $newval' <<<"$json"
或者,如果您只想傳遞值並對
jq
錶達式中的鍵進行硬編碼:jq --arg newval "$somevalue" '.array[] += { new_key: $newval }' <<<"$json"