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

使用Jolt transformer无法将序列化JSON对象数组转为目标JSON对象

解决方案

首先处理两个前置问题:

  • 你提供的输入sales对应的字符串内部JSON对象之间缺失逗号,属于非法JSON格式,需要先修正为合法格式:"[{\"Option\":\"Britania\",\"value\":\"200\"},{\"Option\":\"Parle\",\"value\":\"100\"},{\"Option\":\"mariegold\",\"value\":\"500\"},{\"Option\":\"snacks\",\"value\":\"200\"}]"
  • 你期望输出里的cadbury、固定value为0这类自定义映射规则,需要在转换逻辑里单独配置

完整Jolt配置

[
  // 第一步:把sales的字符串反序列化为真实JSON数组
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "sales": "=parseJson(@(1,sales))",
      "CREATIONDATETIME": "=substring(@(1,CREATIONDATETIME),0,19)"
    }
  },
  // 第二步:遍历数组映射为需要的option+序号、value+序号结构
  {
    "operation": "shift",
    "spec": {
      "sales": {
        "*": {
          // 数组索引从0开始,自动加1生成序号后缀
          "Option": "sales.option&(0,2)",
          // 需保留原始value就替换为@(1,value),固定为0就用当前配置
          "#0": "sales.value&(0,2)"
        }
      },
      "status": {
        "SUBMITTED": {
          "#submitted": "key6"
        }
      }
    }
  },
  // 第三步:补充自定义固定字段,比如期望输出里的option2=cadbury
  {
    "operation": "modify-default-beta",
    "spec": {
      "sales": {
        "option2": "cadbury",
        "value2": "0"
      },
      "key6": "pending"
    }
  }
]

核心逻辑说明

  1. 最关键的一步是用=parseJson函数把序列化的JSON字符串转成Jolt可操作的数组结构,之前的配置没有做反序列化,无法处理字符串内部的内容
  2. 遍历数组时用&(0,2)取上层数组的索引值,自动生成option、value的序号后缀
  3. 如果只需要保留数组前3项,把遍历规则里的通配符*替换为0、1、2三个明确索引即可
  4. 原有配置里的CREATIONDATETIME处理、key6赋值逻辑也保留兼容了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:09:03