如何使用JQ向嵌套JSON中key为vehicles的rows数组追加新对象
问题根因
- 你使用的
+=操作对象错了:.config.list[].rows[] += xxx中rows[]是遍历rows数组内的已有元素,+=作用于对象时为属性合并,所以是修改已有row的属性,不是往rows数组追加新元素,和键名重复无关。 - 未做节点筛选:命令没有过滤
list数组中key=vehicles的项,会误改其他list子节点的内容。
正确处理命令
直接输出修改结果的命令:
jq '.config.list |= map( if .key == "vehicles" then .rows += [{"data":[{"key":"bike","value":"yyy"},{"key":"car","value":"xxx"}],"default":false}] else . end )' file.json
如果需要直接修改原文件,可以加上-i参数(jq 1.6及以上版本支持):
jq -i '.config.list |= map(if .key == "vehicles" then .rows += [{"data":[{"key":"bike","value":"yyy"},{"key":"car","value":"xxx"}],"default":false}] else . end)' file.json
命令逻辑说明
- 用
map遍历config.list数组,仅匹配key为vehicles的项做修改,其余项保持原内容不变 - 对目标项的
rows数组直接执行追加操作:rows += [新对象],将待添加的对象包裹为数组元素,即可追加到rows数组末尾,不会改动原有元素
内容的提问来源于stack exchange,提问作者CoolZero
相关产品推荐
相关产品推荐

