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

如何使用jq基于现有字段生成复合字段extra?

问题:给JSON中issues的子对象添加组合字段extra

场景与需求

给定如下JSON数据:

$ DATA='{ "url": "https::/abc/", "issues": { "1": { "number": 1}, "2": {"number": 2 } } }'

$ echo $DATA | jq .
{
  "url": "https::/abc/",
  "issues": {
    "1": {
      "number": 1
    },
    "2": {
      "number": 2
    }
  }
}

需要给issues对象下的每个子对象添加名为extra的字段,其值为根对象的.url字段与子对象的.number字段拼接结果,预期输出:

{
  "url": "https::/abc/",
  "issues": {
    "1": {
      "number": 1,
      "extra": "https::/abc/1"
    },
    "2": {
      "number": 2,
      "extra": "https::/abc/2"
    }
  }
}

尝试过程中的问题

  1. 仅引用.url时可以正常赋值,但添加.number后返回null:
$ echo $DATA | jq '.url as $URL | .issues[] += { "extra" : "\( $URL )\( .number )"  } '
{
  "url": "https::/abc/",
  "issues": {
    "1": {
      "number": 1,
      "extra": "https::/abc/null"
    },
    "2": {
      "number": 2,
      "extra": "https::/abc/null"
    }
  }
}
  1. 尝试存储.number到变量时出现语法错误:
$ echo $DATA | jq '.url as $URL | .issues[].number as $NUM  += { "extra" : "\( $URL )\( $NUM )"  } '
jq: error: syntax error, unexpected +=, expecting '|' (Unix shell quoting issues?) at <top-level>, line 1:
.url as $URL | .issues[].number as $NUM  += { "extra" : "\( $URL )\( $NUM )"  }                                          
jq: 1 compile error

解决方案

问题根源

使用+=时,操作的上下文是根对象,而非issues的子对象,因此.number无法定位到子对象的对应字段,返回null。需要切换到子对象的上下文进行字段添加操作。

正确命令

写法一(字符串插值)

echo $DATA | jq '.url as $URL | .issues[] |= . + { extra: "\($URL)\(.number)" }'

写法二(显式字符串拼接)

echo $DATA | jq '.url as $URL | .issues[] |= ( . + { extra: $URL + (.number | tostring) } )'

命令解释

  • |=:更新操作符,针对.issues[]遍历到的每个子对象进行操作,此时上下文切换为子对象本身,.number可正确获取值。
  • . + { extra: ... }:将新字段合并到当前子对象中,保留原有字段。
  • 写法二中的(.number | tostring):显式将数字类型的.number转换为字符串,避免类型拼接问题(jq字符串插值会自动转换,显式转换更严谨)。

执行结果

{
  "url": "https::/abc/",
  "issues": {
    "1": {
      "number": 1,
      "extra": "https::/abc/1"
    },
    "2": {
      "number": 2,
      "extra": "https::/abc/2"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:55:24