我想更新dict中的值,我只能通过dict中的另一个值来识别.也就是说,鉴于此输入:
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "zip",
"id": "baz"
}
]
Run Code Online (Sandbox Code Playgroud)
我想将baz随附的格式更改为'csv':
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "csv",
"id": "baz"
}
]
Run Code Online (Sandbox Code Playgroud)
我发现这有效:
jq 'map(if .id=="baz" then .format="csv" else . end)' my.json
Run Code Online (Sandbox Code Playgroud)
但这看起来相当冗长,所以我想知道是否有一种更优雅的方式来表达这一点.jq似乎缺少某种表达式选择器,相当于可能[@id='baz']在xpath中.
(当我开始这个问题的时候,我有[.[] |...],然后我发现map,所以它并没有我想象的那么糟糕.)
Han*_* Z. 21
您正在寻找复杂的作业:
jq '(.[] | select(.id == "baz") | .format) |= "csv"' my.json
Run Code Online (Sandbox Code Playgroud)
也许不会更短,但要求更优雅.请参阅文档的最后一部分:http://stedolan.github.io/jq/manual/#Assignment
编辑:使用map:
jq 'map((select(.id == "baz") | .format) |= "csv")' my.json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10085 次 |
| 最近记录: |