gpt4 book ai didi

json - 使用jq更新字典数组中的一个值

转载 作者:行者123 更新时间:2023-12-03 21:29:37 24 4
gpt4 key购买 nike

我想更新一个字典中的值,该值只能由字典中的另一个值来标识。也就是说,鉴于此输入:

[
{
"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


也许不短,但是根据要求它更优雅。请参阅以下文档的最后一部分: http://stedolan.github.io/jq/manual/#Assignment

编辑:使用 map

jq 'map((select(.id == "baz") | .format) |= "csv")' my.json 

关于json - 使用jq更新字典数组中的一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com