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

如何使用JQ将JSON数组转换为指定结构的对象?

正确的JQ语句实现JSON数组合并转换

核心JQ命令

group_by([.PartNumber, .ClassificationNo]) | map(
  {
    PartNumber: .[0].PartNumber,
    ClassificationNo: .[0].ClassificationNo
  } + (reduce .[] as $item ({}; .[$item.Field] = $item.StringValue))
)

命令解析

  • 分组:group_by([.PartNumber, .ClassificationNo]) 将原数组中拥有相同PartNumber和ClassificationNo的对象归为同一组,确保后续只处理同组内的合并逻辑。
  • 构造目标对象:
    • 先提取分组内首个对象的PartNumber和ClassificationNo(同组内这两个字段值完全一致),作为基础对象。
    • 使用reduce遍历分组内的每个对象,将Field的值作为键、StringValue的值作为值,逐步合并到一个空对象中。
    • 最后用+运算符将基础对象和合并后的键值对对象整合,得到最终的单条记录。

示例验证

输入JSON

[
  {
    "PartNumber": "PN001",
    "ClassificationNo": "CLS001",
    "StringValue": "红色",
    "Field": "Color"
  },
  {
    "PartNumber": "PN001",
    "ClassificationNo": "CLS001",
    "StringValue": "100",
    "Field": "Quantity"
  },
  {
    "PartNumber": "PN002",
    "ClassificationNo": "CLS002",
    "StringValue": "蓝色",
    "Field": "Color"
  }
]

输出JSON

[
  {
    "PartNumber": "PN001",
    "ClassificationNo": "CLS001",
    "Color": "红色",
    "Quantity": "100"
  },
  {
    "PartNumber": "PN002",
    "ClassificationNo": "CLS002",
    "Color": "蓝色"
  }
]

原命令问题说明

你之前使用的| .[] | [.PartNumber, .ClassificationNo, .StringValue, .Field]只是将每个对象拆解为数组元素,没有实现分组和键值对合并的逻辑,因此无法得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:40:53