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

使用Jolt Transform将扁平JSON转换为含多数组的嵌套JSON

Jolt转换规格调试求助

我正在编写Jolt转换规格,要把扁平JSON转换成包含多数组的嵌套JSON,但遇到了问题。试过参考示例但没解决,用Jolt测试工具调试,以下是输入、期望输出和当前使用的规格,求技术支持:

输入JSON

[
  {
    "container_id": "a",
    "carrier_scac": "b",
    "location": "banglore",
    "state": "karnataka",
    "country": "India"
  },
  {
    "container_id": "a",
    "carrier_scac": "b",
    "location": "pune",
    "state": "maharashtra",
    "country": "India"
  },
  {
    "container_id": "c",
    "carrier_scac": "d",
    "location": "dharwad",
    "state": "kan",
    "country": "India"
  },
  {
    "container_id": "c",
    "carrier_scac": "d",
    "location": "hubli",
    "state": "kant",
    "country": "India"
  }
]

期望输出JSON

[
  {
    "load": {
      "container_id": "a",
      "carrier_scac": "b",
      "stops": [
        {
          "location": "banglore",
          "state": "karnataka"
        },
        {
          "location": "pune",
          "state": "maharashtra"
        }
      ]
    },
    "containerInfo": {
      "country": "India"
    }
  },
  {
    "load": {
      "container_id": "c",
      "carrier_scac": "d",
      "stops": [
        {
          "location": "dharwad",
          "state": "kan"
        },
        {
          "location": "hubli",
          "state": "kant"
        }
      ]
    },
    "containerInfo": {
      "country": "India"
    }
  }
]

当前使用的Jolt规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "container_id": "@(1,container_id).&",
        "carrier_scac": "@(1,container_id).&",
        "*": "@(1,container_id).stops[&1].&"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "container_id": "ONE",
        "carrier_scac": "ONE"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

解决方案:调整后的Jolt规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "container_id": "@(1,container_id).load.&",
        "carrier_scac": "@(1,container_id).load.&",
        "location": "@(1,container_id).load.stops[&1].&",
        "state": "@(1,container_id).load.stops[&1].&",
        "country": "@(1,container_id).containerInfo.&"
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "load": {
          "container_id": "ONE",
          "carrier_scac": "ONE"
        },
        "containerInfo": {
          "country": "ONE"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

关键调整说明:

  1. 第一步Shift操作:明确指定每个字段的目标层级,将container_id、carrier_scac归入load节点,location和state归入load.stops数组,country单独放入containerInfo节点,同时通过@(1,container_id)作为分组键,确保相同container_id的记录被聚合到同一组。
  2. Cardinality操作:针对分组后重复的唯一标识字段(container_id、carrier_scac、country)设置为ONE,确保每个分组只保留一个值,避免字段被转为数组。
  3. 最后一步Shift操作:将以container_id为键的对象结构转换为数组,匹配期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:03:33