如何使用jq将json数组追加到json文件中?

ckx4rj1h  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(155)

我在一个文件(full_meta.json)中有一个json对象数组。

full_ meta.json:

[{"product_id":"xxx","name":"yyy","qty":111},{"product_id":"881","name":"aaa","qty":200}]
我想过滤它的一个子集,修改它并将其附加到一个文件(sub_meta. json)。
sub_ meta:json将包含一个空数组作为开始。我需要不断追加这样的值来填充它

sub_ meta.json:

[]
我正在使用以下命令:
1.过滤和修改id

d=$(jq '[.[] | select(.product_id == "881")] | map(.product_id ="881-new")' full_meta.json)

2.将其附加到另一个文件中

jq --argjson tmp "$d" '.+=$tmp' sub_meta.json

我得到了以下错误:

parse error: Invalid numeric literal at line 1, column 6

使用bash脚本实现这一点的最佳方法是什么?

vjhs03f7

vjhs03f71#

假设你只想把修改后的元素添加到sub_meta.json中的数组中:您可以将full_meta.json作为变量加载,根据需要修改它,读取sub_meta.json作为输入,将修改内容附加到它,将结果写入临时文件,如果所有操作都成功,则用新的(临时)输出文件替换旧的sub_meta.json文件。

jq --argfile f full_meta.json \
  '. + [$f[] | select(.product_id == "881") | .product_id = "881-new"]' \
  sub_meta.json > sub_meta.tmp && mv sub_meta.tmp sub_meta.json

相关问题