我想更新一个字典中的值,但我只能通过字典中的另一个值来识别它。 也就是说,给定这个输入:
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "zip",
"id": "baz"
}
]
我想将baz
的附带格式更改为'csv':
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "csv",
"id": "baz"
}
]
我发现这个方法行得通:
jq 'map(if .id=="baz" then .format="csv" else . end)' my.json
但是这似乎有点啰嗦,所以我想知道是否有更优雅的表达方式。jq似乎缺少某种表达式选择器,相当于xpath中的[@id='baz']
。
(当我开始这个问题时,我有[.[] |...]
,然后我发现了map
,所以情况没有我想象的那么糟糕。)
jq '(.[] | select(.id == "baz") .format) |= "csv"' my.json
- Steve Bennettmap(select(.id == "corangamite").format |= "csv")
- Steve Bennettmap
的变量;我不确定省略管道符号的符号表示法。 - Hans Z.