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

如何使用jq命令合并两个JSON报告的examples数组?

问题描述

我有如下两个JSON报告文件:

report1.json

{"examples": [{"description": "desc 1","full_description": "full_description 1","status": "status 1","file_path": "file_path 1","run_time": 0.01}]}

report2.json

{"examples": [{"description": "desc 2","full_description": "full_description 2","status": "status 2","file_path": "file_path 2","run_time": 0.02}]}

我希望合并这两个文件,得到如下结果:

{"examples": [{"description": "desc 1","full_description": "full_description 1","status": "status 1","file_path": "file_path 1","run_time": 0.01},{"description": "desc 2","full_description": "full_description 2","status": "status 2","file_path": "file_path 2","run_time": 0.02}]}

我曾尝试使用命令 jq -s '.[0] * .[1]' report1.json report2.json 但未成功,请问有什么可行的jq命令解决方案?

解决方案

你之前用的*运算符是对象合并逻辑,当两个对象存在相同键名时,后者会直接覆盖前者的对应值,所以.[0] * .[1]会让report2的examples数组覆盖report1的,无法实现数组合并的效果。

以下是两种可行的解决命令:

方案1:利用-s选项展开并合并数组

jq -s '{ examples: [.[].examples[]] }' report1.json report2.json

逻辑说明:

  • -s参数会把所有输入的JSON文件内容整合为一个数组
  • .[].examples[]遍历数组中每个对象的examples数组,取出所有内部元素
  • 最后将这些元素重新包裹到examples数组中,组成目标结构

方案2:用reduce处理多输入对象

jq -n 'reduce inputs as $in ({}; .examples += $in.examples)' report1.json report2.json

逻辑说明:

  • -n让jq从空状态开始处理
  • reduce inputs as $in ({}; ...)遍历每个输入的JSON对象
  • .examples += $in.examples将每个输入对象的examples数组追加到结果对象的examples键下(若初始无该键则自动创建)

这两个命令都能生成你需要的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:40:29