我正在向 JSON 字符串添加属性
result=$(jq -c ".docs[$docIndex] + { \"value\": \"value\" }"<<<"$fileContent")
里面的JSON在$fileContent
哪里
{
"docs": [
{
"id": 123
},
{
"id": 456
},
{
"id": 678
},
...
]
}
$result
但我手术后里面的东西是{"id:123", "value":"value"}
。如何返回完整输出?我想要的是结果变成
{
"docs": [
{
"id": 123,
"value": "value"
},
{
"id": 456
},
{
"id": 678
},
...
]
}
答案1
jq 本质上是一个过滤器,因此.docs[0]
将脚本其余部分可用的数据限制为它所选择的数据。在程序结束时,输出流中的所有内容。因此,只能+ { ... }
看到一个对象,并且它的输出被用作整个程序的输出。
如果你想调整您选择的元素之一,使用+=
,这是一个别名更新赋值运算符|= . + ...
:
jq '.docs[1] += { "value": "value" }' < ...
您可以等效地编写脱糖的
jq '.docs[1] |= . + { "value": "value" }' < ...
无论哪种情况,它都会将当前值(.
开始时的值)替换为将您描述的更改应用于所选元素的结果。该新值通过管道继续执行,在本例中立即到达输出级。