シェル変数に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
}
ただし、これはオブジェクト全体ではなく配列の配列のみを返します。変数をその場で変更したり、オブジェクト全体を返すにはどうすればよいですか?
答え1
$ jq '.array[] += { new_key: 0 }' <<<"$json"
{
"name": "foo",
"array": [
{
"name": "bar",
"thing": true,
"new_key": 0
},
{
"name": "baz",
"thing": false,
"new_key": 0
}
]
}
つまり、配列を抽出して追加するのでは+=
なく+
、修正したいのです。
または、式のキーをハードコードするには、jq
コマンドラインに値を渡します。
jq --argjson newval "$somevalue" '.array[] += { new_key: $newval }' <<<"$json"
または、より簡潔に、以下を使用してください$ARGS.named
。
jq --argjson new_key "$somevalue" '.array[] += $ARGS.named' <<<"$json"
追加する値が文字列の場合は、--argjson
just に変更します。--arg