如何使用JQ查找并替换JSON中指定key的键值对
解决方案
你可以通过jq的递归遍历能力匹配任意层级的state键,无需手动指定层级路径,实现全局替换:
可用命令
方案1(兼容所有新版jq,推荐)
使用walk内置函数遍历全JSON节点:
jq 'walk(if type == "object" and has("state") then .state = "Bihar" else . end)' sample-json.json
方案2(兼容旧版jq)
使用递归降序运算符..匹配节点:
jq '(.. | select(type == "object" and has("state"))).state |= "Bihar"' sample-json.json
补充说明
- 上述命令会匹配JSON中所有层级下键名为
state的字段,统一替换为Bihar,完全不需要写.address.state这类固定层级路径 - 如果需要直接修改原文件,可以执行如下命令:
jq 'walk(if type == "object" and has("state") then .state = "Bihar" else . end)' sample-json.json > tmp.json && mv tmp.json sample-json.json
内容的提问来源于stack exchange,提问作者Raghunath Dhara
相关产品推荐
相关产品推荐

