我是json和jq的新人。我搜索了互联网,但找不到我的问题的解决方案。我有一个json文件,每个对象包含数组。我需要有条件地更改一些数组元素:如果contact_type = email和像“yahoo.com”这样的值将“yahoo.com”替换为“hotmail.com”。我的档案:
[
{
"name": "fluffy",
"type": "cat",
"contact_info": [
{
"contact_type": "phone",
"value": "123-456-6789"
},
{
"contact_type": "email",
"value": "[email protected]"
}
]
},
{
"name": "breeze",
"type": "dog",
"contact_info": [
{
"contact_type": "phone",
"value": "125-856-6789"
},
{
"contact_type": "email",
"value": "[email protected]"
}
]
}
]
生成的文件必须如下所示:
[
{
"name": "fluffy",
"type": "cat",
"contact_info": [
{
"contact_type": "phone",
"value": "123-456-6789"
},
{
"contact_type": "email",
"value": "[email protected]"
}
]
},
{
"name": "breeze",
"type": "dog",
"contact_info": [
{
"contact_type": "phone",
"value": "125-856-6789"
},
{
"contact_type": "email",
"value": "[email protected]"
}
]
}
]
请帮忙。
这是许多可能的解决方案之一:
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 )
else .
在jq 1.6发布后,进行了更改,允许else .
被删除。