如何基于条件将扁平化JSON中的日期转为ISO格式(Jolt)
Jolt转换扁平化JSON中DATEANDTIME类型日期为ISO格式
针对给定的扁平化JSON结构,可通过以下Jolt规范实现需求:仅当对应属性的attributeDataType为DATEANDTIME时,将日期值转换为ISO格式,其余字段原样保留。
Jolt规范
[ { "operation": "shift", "spec": { "*": { "*attributeDataType": { "DATEANDTIME": { "$(2)": { "*": "&3.&1", "values[0].value": { "^([0-9]{2})\\.([0-9]{2})\\.([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$": { "$3-$2-$1'T'$4:$5:$6": "&6.&5.&4.&3.&2.&1" }, "^([0-9]{2})\\.([0-9]{2})\\.([0-9]{4})$": { "$3-$2-$1": "&6.&5.&4.&3.&2.&1" } } } }, "*": { "$(2)": { "*": "&3.&1" } } }, "*": "&2.&1" } } }, { "operation": "sort" } ]
规范说明
- Shift操作核心逻辑:
- 用通配符匹配所有扁平化键,提取每个属性的前缀(如
units.1021298.attributes[1].endtime)。 - 针对
attributeDataType为DATEANDTIME的属性,单独处理values[0].value字段:- 用正则匹配两种输入格式:
dd.MM.yyyy HH:mm:ss和dd.MM.yyyy,分别转换为yyyy-MM-dd'T'HH:mm:ss和yyyy-MM-dd的ISO格式。
- 用正则匹配两种输入格式:
- 非DATEANDTIME类型的属性及其他字段,直接原样映射到输出。
- 用通配符匹配所有扁平化键,提取每个属性的前缀(如
- Sort操作:可选添加,用于保持输出字段顺序与输入一致,无需顺序可移除。
验证结果
将输入JSON传入Jolt转换器后,DATEANDTIME类型的日期值会成功转换为ISO格式,其余字段完全保留,与你期望的输出一致。
内容的提问来源于stack exchange,提问作者Katja Bürger
相关产品推荐
相关产品推荐

