有很多更新 jq 中嵌套条目中的值的示例,但我认为我有一个独特的问题,因为我想要提供的值已经在同一条目的另一部分中。
给出以下输入:
{
"items": [
{
"name": "first"
},
{
"name": "second"
}
]
}
我想产生这个输出:
{
"items": [
{
"name": "first",
"value": "first"
},
{
"name": "second",
"value": "second"
}
]
}
换句话说,我想将
.name
中每个条目的 .value
的值复制到 items[]
的值。
如果值是静态的,则赋值很容易。
jq '.items[].value |= "x"
但是由于该值是动态的,我总是陷入错误的上下文级别:
$ jq '.items[].value|=.name' <<< '{"items":[{"name": "first"},{"name": "second"}]}'
{
"items": [
{
"name": "first",
"value": null
},
{
"name": "second",
"value": null
}
]
}
或者输出上下文错误:
jq '.items[]|(.value=.name)' <<< '{"items":[{"name": "first"},{"name": "second"}]}'
{
"name": "first",
"value": "first"
}
{
"name": "second",
"value": "second"
}
如何在条目内对每个条目进行更改,但仍从顶层输出整个内容?
我想将
中每个条目的.name
值复制到.value
的值。items[]
您必须使用 更新赋值运算符
|=
。
.items[] |= (.value = .name)
{
"items": [
{
"name": "first",
"value": "first"
},
{
"name": "second",
"value": "second"
}
]
}