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

在NiFi中用JOLT赋值JSON对象属性时遇序列化错误求助

JOLT转换报错解决:直接引用JSON数组属性

问题场景

我有一个存储JSON数组的属性TEST,内容如下:

[
  {
    "ORDER_DATE": "2022-04-11",
    "TIME_STAMP": "1667543037000"
  },
  {
    "ORDER_DATE": "2022-05-05",
    "TIME_STAMP": "1651741666000"
  }
]

尝试用以下JOLT转换时,触发Unable to marshal json to an object错误:

[
  {
    "operation": "shift",
    "spec": {
      "TIMESTAMP": "timeStamp"
    }
  },
  {
    "operation": "default",
    "spec": {
      "product": "Billing Account CMT Update",
      "team": "${TEST}"
    }
  }
]

预期输出:

{
  "product": "Billing Account CMT Update",
  "team": [
    {
      "ORDER_DATE": "2022-04-11",
      "TIME_STAMP": "1667543037000"
    },
    {
      "ORDER_DATE": "2022-05-05",
      "TIME_STAMP": "1651741666000"
    }
  ]
}

目前可通过ReplaceText处理器实现,但需要纯JOLT解决方案。

问题原因

原转换中default操作里的${TEST}会被当作字符串处理,无法将TEST对应的JSON数组解析为合法的JSON结构,导致序列化失败。

正确JOLT转换方案

方案1:输入直接为TEST数组时

如果JOLT的输入就是TEST对应的数组,用以下转换:

[
  {
    "operation": "shift",
    "spec": {
      "@": "team"
    }
  },
  {
    "operation": "default",
    "spec": {
      "product": "Billing Account CMT Update"
    }
  }
]

方案2:TEST为顶级属性时

如果TEST是输入JSON的顶级属性(比如输入是{"TEST": [...], ...}),用以下转换:

[
  {
    "operation": "shift",
    "spec": {
      "TEST": "team"
    }
  },
  {
    "operation": "default",
    "spec": {
      "product": "Billing Account CMT Update"
    }
  }
]

说明

  • shift操作直接将TEST的数组映射到team字段,确保数组以原生JSON结构保留,避免字符串化问题。
  • default操作负责补全固定的product字段值,最终输出完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:48