![将键/值添加到 json 对象](https://linux22.com/image/186352/%E5%B0%86%E9%94%AE%2F%E5%80%BC%E6%B7%BB%E5%8A%A0%E5%88%B0%20json%20%E5%AF%B9%E8%B1%A1.png)
我有一个 json 对象存储在 shell 变量中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