使用jq更新JSON嵌套数组mpa值失败,正确操作方法是什么?
错误点梳理
- 路径书写错误:你的JSON根节点是普通对象而非数组,路径前缀
.[].是数组遍历语法,在这里完全不需要,会导致jq遍历根节点下的所有属性值,大部分属性值都不存在后续的cmp.vr1.vr2路径,自然匹配失败。 - 过滤器未加引号:jq的过滤器包含
=、[]这类shell特殊字符时,必须用单引号包裹,否则shell会提前解析这些符号,导致jq收到的参数不完整,执行逻辑异常。 - 多余的
-r参数:-r参数作用是输出原始字符串(自动去除JSON字符串值的外层引号),你需要输出完整的JSON结构,不需要加这个参数。
正确实现方式
如果只需要输出修改后的JSON内容,直接执行以下命令即可:
jq '.cmp.vr1.vr2.mpa = ["bar1", "bar2"]' /tmp/json-file.json
如果需要直接修改原文件,可以搭配sponge命令(需提前安装moreutils软件包)使用:
jq '.cmp.vr1.vr2.mpa = ["bar1", "bar2"]' /tmp/json-file.json | sponge /tmp/json-file.json
如果不方便安装额外工具,也可以用临时文件重定向的方式替换原文件:
jq '.cmp.vr1.vr2.mpa = ["bar1", "bar2"]' /tmp/json-file.json > /tmp/tmp.json && mv /tmp/tmp.json /tmp/json-file.json
内容的提问来源于stack exchange,提问作者Darth.Vader
相关产品推荐
相关产品推荐

