NiFi UpdateRecord使用escapeJson转换JSON字段报错如何解决?
NiFi UpdateRecord使用escapeJson新增字符串字段报错解决方案
根因说明
这个问题不是NiFi本身的缺陷,错误日志明确提示类型不匹配:你给personStringified字段定义的类型是Record(对象类型),但escapeJson函数输出的结果是字符串类型,序列化时无法将字符串转换为Record类型,因此抛出异常。
修复步骤
- 第一步:调整字段类型定义
不管你使用的是Avro Schema、JSON Schema还是隐式推断Schema,都需要显式将新增的personStringified字段类型指定为STRING,不能是OBJECT/RECORD类型。如果使用JSON读写器开启了Schema推断,建议关闭推断,改用显式Schema配置。 - 第二步:修正UpdateRecord处理器配置
新增属性配置如下:- 键:
/personStringified - 值:
escapeJson(toString(/person))
部分NiFi版本中escapeJson仅支持字符串类型入参,因此先用toString()将person对象转换为字符串后再做转义处理。
- 键:
- 第三步:验证输出
配置正确时,处理后的输出结果如下:
{ "test": 123, "person": { "age": 36 }, "personStringified": "{\"age\":36}" }
替代方案
如果UpdateRecord配置依然不生效,可以使用JoltTransformJSON处理器实现相同需求,配置的Jolt规范如下:
[ { "operation": "modify-overwrite-beta", "spec": { "personStringified": "=toString(@(1,person))" } } ]
该方案不需要额外配置Schema,直接基于JSON结构做转换,适配性更强。
内容的提问来源于stack exchange,提问作者oceansize
相关产品推荐
相关产品推荐

