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