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

如何使用jq合并两个JSON文件的对象并生成指定结构?

问题描述

我有两个JSON文件:

1.json

{
  "outputs": {
     "item1": {
       "name": "name1",
       "email": "email1"
     }
  }
}

2.json

{
  "outputs": {
     "item2": {
       "name": "name2",
       "email": "email2"
     }
  }
}

我尝试用以下jq命令合并它们:

jq -s '{
      "Items" :
      {
            "list" : .[] | .outputs ,
      },
  }' 1.json 2.json

但结果生成了两个Items对象,而我想要的是单个Items对象,结构如下:

{
  "Items": {
    "objects": {
      "item1": {
        "name": "name1",
        "email": "email1"
      },
      "item2": {
        "name": "name2",
        "email": "email2"
      }
    }
  }
}

我试过用.[0] * .[1]的方式合并,但不知道怎么把它整合到对象构造里,请问该怎么用jq实现?


解决方案

你需要先将两个文件的outputs对象合并,再套入目标结构里。这里有两种可行的方式:

方法一:通用合并(支持任意数量文件)

使用-s选项把所有输入文件转为数组后,提取每个元素的outputs并合并为单一对象,最后构造目标结构:

jq -s '{ Items: { objects: [.[].outputs] | add } }' 1.json 2.json

关键步骤说明:

  • .[].outputs:从数组的每个元素(对应每个输入JSON文件)中提取outputs对象,得到一个包含多个对象的数组(示例中为[{"item1": ...}, {"item2": ...}])
  • [.[].outputs] | add:将这个对象数组合并成一个单一对象,自动把所有item整合到同一个层级下
  • 外层的对象构造语法{ Items: { objects: ... } }直接生成你需要的嵌套结构

方法二:固定双文件合并

如果确定只有两个输入文件,可以直接取数组的前两个元素,用*运算符合并它们的outputs:

jq -s '{ Items: { objects: .[0].outputs * .[1].outputs } }' 1.json 2.json

这种方式更简洁,但只适用于恰好两个文件的场景;如果后续需要合并更多文件,方法一的通用性更强。

运行任意一个命令,都能得到你期望的JSON结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:25:19