使用JOLT将JSON中的日期与日期时间转换为ISO格式
基于DataType转换JSON日期格式的NiFi实现方案
一、JOLT实现可行性及操作选择
JOLT完全可以实现这个需求,modify-overwrite-beta是更合适的操作——shift主要用于JSON结构的调整、字段重排,而modify-overwrite-beta专门负责对字段值进行修改、格式化,刚好匹配你日期格式转换的需求。
示例JOLT规范
假设你的输入JSON结构如下:
{ "DataType": "DATE", "DateValue": "2024/05/20" }
对应的JOLT转换规范:
[ { "operation": "modify-overwrite-beta", "spec": { "DateValue": [ "=toDate('yyyy/MM/dd')", "#(1,DataType) == 'DATE' ? 'format('yyyy-MM-dd')' : 'format('yyyy-MM-dd\\'T\\'HH:mm:ss')'" ] } } ]
说明:
- 第一步
=toDate('yyyy/MM/dd')先将原始日期字符串转为日期对象,这里的格式要和你的原始日期字符串格式匹配;如果原始值是时间戳,直接用=toDate()即可。 - 第二步通过三元判断,根据
DataType的值选择对应的格式化规则,输出目标ISO格式。
二、其他可选NiFi处理器
如果觉得JOLT规则编写繁琐,也可以用以下处理器实现:
- UpdateRecord:基于Record API解析JSON,通过表达式语言直接判断
DataType字段后格式化日期,示例表达式:${DataType:equals('DATE') ? ${DateValue:toDate('yyyy/MM/dd'):format('yyyy-MM-dd')} : ${DateValue:toDate('yyyy/MM/dd HH:mm:ss'):format('yyyy-MM-dd\'T\'HH:mm:ss')}} - ExecuteScript:用Groovy或JavaScript编写自定义脚本,直接遍历JSON节点,根据
DataType字段修改对应日期值的格式,灵活性更高 - TransformRecord:和UpdateRecord逻辑类似,适合结构化数据的批量转换操作
内容的提问来源于stack exchange,提问作者Katja Bürger
相关产品推荐
相关产品推荐

