You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条jq命令合并多份JSON并添加同级对象

问题描述

我有如下4份JSON文件:

cats.json

{"cats": [{"name": "fluffles","age": 10,"color": "white"}]}

dogs.json

{"dogs": [{"name": "sam","age": 5,"color": "black and white"},{"name": "rover","age": 2,"color": "brown and white"}]}

snakes.json

{"snakes": [{"name": "noodles","age": 10,"color": "green"}]}

owners.json

{"owners": ["peter","william","sally"]}

我原先分两步完成合并:

  • 第一步执行jq -s '{"animals": .} ' cats.json dogs.json snakes.json > animals.json,将前三个文件内容归到animals对象下生成animals.json
  • 第二步执行jq -s '.[0] + .[1]' animals.json owners.json,将owners作为同级字段合并。
    请问能否仅用一条jq命令完成上述所有操作,最终输出包含animals和owners两个顶级字段的JSON文件?

解决方案

可以直接用单条命令实现需求:

jq -n '{"animals": [inputs] | add} + input' cats.json dogs.json snakes.json owners.json

命令说明:

  • -n 参数让jq不自动读取输入,方便手动控制输入的读取顺序
  • 前三个输入(cats、dogs、snakes)通过inputs读取,合并成数组后用add把三个文件的顶级对象整合成一个,赋值给animals字段
  • 最后一个input读取第四个文件owners.json的内容,直接和前面的animals对象合并,最终输出的结构完全符合要求。

如果更习惯用slurp模式(-s),也可以用下面的写法,效果完全一致:

jq -s '{"animals": .[0:3] | add} + .[3]' cats.json dogs.json snakes.json owners.json

需要输出到文件的话,在命令末尾加> 目标文件名.json即可。


内容的提问来源于stack exchange,提问作者dogman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:06:04