需要查找键值对,并使用JQ替换JSON中的键值对

  • 本文关键字:键值对 替换 JQ JSON 查找 json jq
  • 更新时间 :
  • 英文 :


我有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

以此类推。如果你能把需求说清楚,对所有有关方面都有帮助。

最新更新