我的JSON文件(temp.json):
{
"first": {
"second": [
{
"third": [
"1000",
"1001"
],
"fourth": "Don'tWantToChange"
},
{
"third": [
"1000",
"1001",
"1002"
],
"fourth": "WantToChange"
}
]
}
}
我想从数组中选择一个项目并更新如下
{
"first": {
"second": [
{
"third": [
"1000",
"1001"
],
"fourth": "Don'tWantToChange"
},
{
"third": [
"1000",
"1001",
"1002"
],
"fourth": "changed"
}
]
}
}
这是我的代码:
jq '(.first | .second[] | select(.third | index("1002")) | .fourth) |= "changed"' temp.json
它的作品在网上JQPlayground完美
但在终端中,它显示错误:
jq: error (at temp.json:13): Invalid path expression near attempt to access element "fourth" of {"third":["1000","1001","1...
我哪里做错了?
1条答案
按热度按时间r9f1avp51#
jq-1.5-1-a5 b5 cbe(与Debain和Ubuntu的某些版本一起打包)在从管道
select
过滤器推断类型时存在问题。在这种情况下,如果没有找到值,index
提供null
,如果找到了,则提供一个数字(实际索引),但select
需要在其主体中提供一个布尔结果。解决办法:将body用括号括起来,并将其结果与
null
进行比较以获得布尔值:解决方案:升级到jq 1.6。它于2018年发布。
注意:对于给定的示例,两个版本都不需要更新操作符
|=
。只需使用=
来分配静态值。