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

如何使用jq对多个JSON文件分别索引后合并为单个JSON文件

解决方案

方法1(推荐,大文件性能更好)

直接使用jq内置的inputs变量遍历所有文件,逐个转换后合并:

jq -n 'reduce inputs as $file_content ([]; . + ($file_content | to_entries))' ./your_json_dir/*.json

将命令中的./your_json_dir/*.json替换为你实际存放JSON文件的路径匹配规则即可。

逻辑说明

  • -n 禁用jq默认读取首个输入作为处理对象的行为,配合inputs逐个读取所有输入的JSON文件
  • reduce inputs as $file_content ([]; ...) 初始化结果为空数组,遍历每一个输入文件
  • $file_content | to_entries 对当前文件的数组单独做索引转换,保留原数组内的索引作为key
  • . + (...) 将转换后的数组追加到总结果中

方法2(slurp模式,写法更简洁)

如果你习惯用slurp模式合并文件,也可以用如下等价命令:

jq -s 'map(to_entries) | add' ./your_json_dir/*.json

逻辑说明

  • -s 参数会把所有输入的JSON文件内容打包为一个数组,每个元素对应一个文件的原始JSON内容
  • map(to_entries) 对每一个文件的内容单独执行索引转换
  • add 将所有转换后的数组合并为最终结果

效果验证

以你提供的mock1.json、mock2.json作为输入,最终输出结果如下:

[
  {
    "key": 0,
    "value": {
      "name": "John"
    }
  },
  {
    "key": 1,
    "value": {
      "name": "Mary"
    }
  },
  {
    "key": 0,
    "value": {
      "name": "Nick"
    }
  },
  {
    "key": 1,
    "value": {
      "name": "Luke"
    }
  }
]

所有元素的key都保留了其在原所属数组内的原始索引,符合需求。

内容的提问来源于stack exchange,提问作者Phoenix-C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:54:00