如何使用jq修改JSON指定字段后输出完整的JSON文件
解决jq修改JSON后输出完整结构的问题
你的问题出在原命令通过管道筛选并输出了单独修改后的对象,没有保留顶层JSON结构。要输出完整的JSON文件,需要使用jq的赋值操作符来修改数组元素并保留整体结构。
正确命令写法1:使用map遍历修改
jq '.data |= map(if .id == 100 then .content = "watermelon" else . end)' test.json
正确命令写法2:直接对数组元素更新
jq '.data[] |= (select(.id == 100).content = "watermelon")' test.json
执行效果
运行上述命令后,会输出完整的JSON内容:
{ "data": [ { "id": 0, "content": "apple" }, { "id": 100, "content": "watermelon" } ] }
原理说明
- 原命令
.data[]|select(.id==100)|.content|="watermelon"会先展开data数组的所有元素,筛选出id=100的对象,修改后仅输出该对象,丢失了顶层结构和其他数组元素。 - 正确写法通过
|=将修改后的数组重新赋值给.data字段,或者直接对数组元素进行条件更新,确保整个JSON结构被保留并输出。
内容的提问来源于stack exchange,提问作者Logan Lee
相关产品推荐
相关产品推荐

