在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
相关产品推荐
相关产品推荐

