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

如何使用jq添加并合并JSON对象生成目标结构的JSON?

使用jq添加combined对象的正确方法

方案一:直接在jq中完成合并(无需提前提取节点)

无需单独提取hello和world节点,直接通过jq内部操作合并两个节点内容,生成combined字段:

full="$(jq '.combined = .hello + .world' <<< "$json_string")"

执行后输出的JSON结构与预期完全一致:

{
  "hello": {
    "foo": {
      "version": "1.1.1"
    }
  },
  "world": {
    "bar": {
      "version": "2.2.2"
    }
  },
  "combined": {
    "foo": {
      "version": "1.1.1"
    },
    "bar": {
      "version": "2.2.2"
    }
  }
}

方案二:基于已提取的变量进行合并

如果已经提前提取了hello和world的JSON内容,需注意正确将shell变量传递给jq(避免直接拼接导致语法错误):

  1. 修正提取变量的命令(移除-r参数,保留JSON格式输出):
hello="$(jq ".hello" <<< "$json_string")"
world="$(jq ".world" <<< "$json_string")"
  1. 使用--argjson参数将JSON变量传入jq,完成合并:
full="$(jq --argjson h "$hello" --argjson w "$world" '.combined = $h + $w' <<< "$json_string")"

错误原因说明

你之前的命令错误在于直接将shell变量的内容拼接到jq表达式中,导致jq解析时遇到非语法兼容的字符(比如{)。jq需要通过专门的参数(如--argjson)接收JSON格式的外部数据,而非直接拼接字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:15:11