我有JSON
{
"firstName": "Rajesh",
"lastName": "Kumar",
"gender": "man",
"age": 24,
"address": {
"streetAddress": "126 Udhna",
"city": "Surat",
"state": "WB",
"postalCode": "394221"
},
"phoneNumbers": [
{
"type": "home",
"number": "7383627627"
}
]
}
我需要找到"状态"的值。key使用JQ并替换JSON中的值。我不想通过提供键的位置来获取它,比如
firstName=$(cat sample-json.json | jq -r '.firstName')
期望输出
{
"firstName": "Rajesh",
"lastName": "Kumar",
"gender": "man",
"age": 24,
"address": {
"streetAddress": "126 Udhna",
"city": "Surat",
"state": "Bihar",
"postalCode": "394221"
},
"phoneNumbers": [
{
"type": "home",
"number": "7383627627"
}
]
}
如果您愿意指定。address:
jq '.address.state = "Bihar"' sample-json.json
否则:
jq 'walk(if type == "object" and has("state") then .state = "Bihar" else . end)' sample-json.json
最后一个将替换所有的.state
值。如果您只想替换第一个出现:
jq 'first(..|objects|select(has("state"))).state = "Bihar"' sample-json.json
以此类推。如果你能把需求说清楚,对所有有关方面都有帮助。