使用JQ为已有JSON对象添加字段失败:未追加却生成新对象
问题原因及解决方法
错误根源
你的脚本里$data | jq ...这行是直接把变量里的JSON字符串当作命令执行了,而不是把它作为jq的输入。shell会解析{为命令,所以抛出{: command not found的错误。此时jq没有接收到原始的JSON数据,只会根据. + {objects_count: $oc}的逻辑,在空输入下生成仅包含objects_count的新对象。
修正方案
需要用echo把变量中的JSON内容输出,再通过管道传给jq,修改后的代码如下:
echo $data data=$(echo "$data" | jq --argjson oc "$objects_count" '. + {objects_count: $oc}' ) echo $data
补充说明
- 给变量加双引号
"$data"可以避免JSON中的空格等特殊字符被shell拆分,保证完整传递给jq。 --argjson用于传递数值类型的参数,确保objects_count是数字而不是字符串,符合你期望的结果格式。
内容的提问来源于stack exchange,提问作者inquisitivemongoose
相关产品推荐
相关产品推荐

