Json jq:如何有条件地更改数组值
一个全新的json和jq。我在网上搜索,但找不到解决问题的方法。 我有一个json文件,每个对象都包含数组。我需要有条件地更改一些数组元素:如果contact_type=email和类似“yahoo.com”的值将“yahoo.com”替换为“hotmail.com”。 我的档案: 生成的文件必须如下所示:Json jq:如何有条件地更改数组值,json,edit,jq,Json,Edit,Jq,一个全新的json和jq。我在网上搜索,但找不到解决问题的方法。 我有一个json文件,每个对象都包含数组。我需要有条件地更改一些数组元素:如果contact_type=email和类似“yahoo.com”的值将“yahoo.com”替换为“hotmail.com”。 我的档案: 生成的文件必须如下所示: [ { "name": "fluffy", "type": "cat", "contact_info": [
[
{
"name": "fluffy",
"type": "cat",
"contact_info": [
{
"contact_type": "phone",
"value": "123-456-6789"
},
{
"contact_type": "email",
"value": "fluffy_mean_cat@gmail.com"
}
]
},
{
"name": "breeze",
"type": "dog",
"contact_info": [
{
"contact_type": "phone",
"value": "125-856-6789"
},
{
"contact_type": "email",
"value": "breeze@hotmail.com"
}
]
}
]
请提供帮助。以下是许多可能的解决方案之一:
walk( if type == "object"
and .contact_type == "email"
and (.value | index("yahoo.com"))
then .value |= sub("yahoo.com"; "hotmail.com")
else . end )
直接法
else.
jq 1.6发布后,进行了一项更改,允许删除
else.
。或者,您可以查看以解决此问题。jq 1.5中是否有其他解决方案?因为jq 1.5.Yes中没有walk(f)
功能,但是您可以复制并粘贴walk
的def。简单谷歌:jqdef步行
walk( if type == "object"
and .contact_type == "email"
and (.value | index("yahoo.com"))
then .value |= sub("yahoo.com"; "hotmail.com")
else . end )
def update:
if .contact_type == "email"
and (.value | index("yahoo.com"))
then .value |= sub("yahoo.com"; "hotmail.com")
else .
end ;
map( if .contact_info
then .contact_info |= map(update)
else .
end )