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

如何用jq合并存在共同键的两个JSON对象

合并两个带共同键的JSON对象(Bash变量存储)

在Bash环境中处理JSON对象合并,推荐使用jq工具(CI环境可通过包管理器快速安装,如Ubuntu执行apt-get install jq)。针对你无法预知共同键的场景,以下是自动合并共同顶层键对应子对象的方案:

假设变量定义

jsonA='{
  "extensions": { 
    "app_name": "extensions-prod"
  },
  "plugins": { 
    "app_name": "plugins-prod" 
  }
}'

jsonB='{
  "plugins": { 
    "project_name": "plugins-prod" 
  }
}'

仅保留共同键并合并子对象

执行以下命令,会自动识别两个JSON的共同顶层键,合并对应子对象,最终只输出这些合并后的键:

jq -n --argjson a "$jsonA" --argjson b "$jsonB" '
($a | keys) as $akeys
| ($b | keys) as $bkeys
| $akeys - ($akeys - $bkeys) as $commonKeys
| reduce $commonKeys[] as $k ({}; .[$k] = $a[$k] + $b[$k])
'

输出结果:

{
  "plugins": {
    "app_name": "plugins-prod",
    "project_name": "plugins-prod"
  }
}

保留所有顶层键(含非共同键)

如果需要保留两个对象中所有顶层键,仅对共同键的子对象进行合并,可使用以下命令:

jq -n --argjson a "$jsonA" --argjson b "$jsonB" '
($a | keys) as $akeys
| ($b | keys) as $bkeys
| ($akeys - $bkeys) as $aOnlyKeys
| ($bkeys - $akeys) as $bOnlyKeys
| ($akeys - ($akeys - $bkeys)) as $commonKeys
| reduce $aOnlyKeys[] as $k ({}; .[$k] = $a[$k])
| reduce $bOnlyKeys[] as $k (.; .[$k] = $b[$k])
| reduce $commonKeys[] as $k (.; .[$k] = $a[$k] + $b[$k])
'

输出结果:

{
  "extensions": {
    "app_name": "extensions-prod"
  },
  "plugins": {
    "app_name": "plugins-prod",
    "project_name": "plugins-prod"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:15:24