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

如何编写JOLT Spec实现JSON按指定字段分组转换为目标结构

实现方案

核心思路

JOLT通过shift操作的通配符匹配+反向引用能力实现按字段值分组,不需要显式编写字段值比较逻辑:

  1. 用*匹配productOffering.id的字段值作为分组key
  2. 相同key的数据会被自动聚合到同一节点,完成按id相等的分组逻辑
  3. 分组完成后再把聚合后的对象转换为数组格式

示例输入JSON

[
  {
    "productOffering": {
      "id": "po_001",
      "name": "5G套餐",
      "description": "个人5G通信套餐"
    },
    "productSpecification": {
      "id": "ps_001",
      "description": "100G流量包"
    }
  },
  {
    "productOffering": {
      "id": "po_001",
      "name": "5G套餐",
      "description": "个人5G通信套餐"
    },
    "productSpecification": {
      "id": "ps_002",
      "description": "200分钟通话包"
    }
  },
  {
    "productOffering": {
      "id": "po_002",
      "name": "家庭宽带套餐",
      "description": "1000M家庭宽带"
    },
    "productSpecification": {
      "id": "ps_003",
      "description": "光猫设备"
    }
  }
]

可用的JOLT转换Spec

[
  // 按productOffering.id分组,聚合同组的公共字段和产品规格数据
  {
    "operation": "shift",
    "spec": {
      "*": {
        "productOffering": {
          "id": {
            "*": {
              // 保留productOffering的公共字段,同组只存一次
              "@2,name": "&1.name",
              "@2,description": "&1.description",
              "&": "&1.id",
              // 聚合productSpecification到products数组
              "@3,productSpecification.id": "&1.products[].id",
              "@3,productSpecification.description": "&1.products[].description"
            }
          }
        }
      }
    }
  },
  // 把分组后的键值对转换为输出数组
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]

转换后输出结果

[
  {
    "id": "po_001",
    "name": "5G套餐",
    "description": "个人5G通信套餐",
    "products": [
      {
        "id": "ps_001",
        "description": "100G流量包"
      },
      {
        "id": "ps_002",
        "description": "200分钟通话包"
      }
    ]
  },
  {
    "id": "po_002",
    "name": "家庭宽带套餐",
    "description": "1000M家庭宽带",
    "products": [
      {
        "id": "ps_003",
        "description": "光猫设备"
      }
    ]
  }
]

补充说明

如果需要自定义字段值比较规则(比如按id前缀分组、按多个字段组合分组),可以先通过modify-overwrite-beta操作计算出自定义的分组标识,再按标识分组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:03