使用jq向现有JSON中匹配特定键值对的列表元素添加新字段
jq修改JSON数组元素后保留完整结构的解决方法
问题原因
你写的命令中使用了|管道符,将执行上下文切换到了.parent."child-list"数组层面,修改完成后自然只会输出数组本身,丢失了外层JSON结构。
正确命令
jq '(.parent."child-list"[] | select(."usecase" == "second")) += {"result": "SUCCESS"}' base.json
命令说明
- 用括号包裹选择逻辑
(.parent."child-list"[] | select(."usecase" == "second")),表示定位到原JSON中符合条件的对象本身,不会切换执行上下文 - 直接对定位到的对象执行
+=操作添加键值对,不会改动原JSON的其他结构,执行后会返回完整的JSON内容
可选操作
如果需要直接修改原文件,不需要输出到终端,可以加上-i(就地编辑)参数:
jq -i '(.parent."child-list"[] | select(."usecase" == "second")) += {"result": "SUCCESS"}' base.json
内容的提问来源于stack exchange,提问作者csampi
相关产品推荐
相关产品推荐

