gpt4 book ai didi

json - 使用 jq 有条件地修改对象属性

转载 作者:行者123 更新时间:2023-12-03 14:33:05 25 4
gpt4 key购买 nike

我有这个 JSON 示例:

[
{
"name": "val1",
"expire": { "$value": 10 }
},
{
"name": "val2",
"expire": 20
},
{
"name": "val3"
}
]

我想用 jq 将它转换成这种形式:
[
{
"name": "val1",
"expire": 10
},
{
"name": "val2",
"expire": 20
},
{
"name": "val3",
"expire": null
}
]

我发现的所有内容都是 if-then-else,但看起来我不知道如何构建正确的表达方式。

基于类型检查的条件,看起来是正确的方法,但只是返回“编译”时错误,我不知道如何修复它:
.[] | { name, expire: (if .expire then (if type(.expire) == "number" then .expire else .expire."$value" end) else null end) }

条件基于 "$value"检查,以某种方式过滤掉第二个对象:
.[] | { name, expire: (if .expire then (if .expire."$value"? then .expire."$value" else .expire end) else null end) }

据我了解,这里的问题是内部 if,其中第二个对象检查了 .expire."$value"? , 抛出错误并从结果中删除对象,因为错误。

最佳答案

试试这个过滤器:

map( {name, 
"expire": (.expire | if type == "object" then .["$value"] elif type == "number" then . else null end) } )

或(在边缘情况下语义明显不同):
map(.expire |= if type == "object" then .["$value"]
elif type == "number" then . else null end)

关于json - 使用 jq 有条件地修改对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320865/

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