使用JQ或其他JSON工具更新数组对象并返回完整父JSON的方法
使用JQ修改JSON数组内指定对象并返回完整父级数据的方法
基础修改实现
要实现修改results数组中name为John的age属性为44,直接使用以下jq命令即可:
jq '(.results[] | select(.name == "John") | .age) |= 44' input.json
命令逻辑说明
- 用
()包裹定位路径,确保修改操作针对指定属性生效 .results[]遍历results数组下的所有对象select(.name == "John")筛选出name属性为John的目标对象|=是jq的更新赋值运算符,会修改对应属性值,同时返回完整的父级JSON结构,完全符合输出要求
如果需要直接修改原JSON文件,可以使用重定向输出覆盖,或者使用jq 1.6及以上版本支持的--in-place参数:
# 方法1:重定向覆盖 jq '(.results[] | select(.name == "John") | .age) |= 44' input.json > temp.json && mv temp.json input.json # 方法2:内置就地修改(jq 1.6+) jq --in-place '(.results[] | select(.name == "John") | .age) |= 44' input.json
缺失属性自动新增
上述命令天然支持属性不存在时的自动新增逻辑:如果匹配到的目标对象没有age属性,jq执行赋值操作时会自动为该对象添加age属性并赋值为44,无需额外编写判断逻辑。
比如原数据中John的对象为{"name": "John", "city": "TownA"},执行命令后会自动补充"age": 44字段。
内容的提问来源于stack exchange,提问作者Nicolas Kudeba
相关产品推荐
相关产品推荐

