使用Jolt转换含NULL值的嵌套JSON时的问题求助
Jolt嵌套JSON转换:NULL值丢失问题修复
问题分析
在处理复杂嵌套JSON的Jolt转换时,出现LatestEventDateTime等字段的NULL值丢失情况——例如EventDateTime数组仅生成3个元素,而预期应包含首个NULL值共4个元素。这是因为Jolt默认会自动过滤空值,导致数组长度与预期不符。
通用修复方案
要保留原始数据中的NULL值并保证数组结构符合预期,可通过以下几步调整Jolt规范:
1. 提前初始化数组占位
使用default操作符为目标数组初始化对应长度的NULL占位,确保元素数量与预期一致:
{ "operation": "default", "spec": { "EventDateTime": [null, null, null, null], "LatestEventDateTime": [null, null, null, null] } }
2. 映射原始数据并保留空值
在shift操作中,确保空值字段被正确映射,避免被自动过滤:
{ "operation": "shift", "spec": { "yourNestedPath": { "*": { "EventDateTime": "EventDateTime[&1]", "LatestEventDateTime": "LatestEventDateTime[&1]" } } } }
3. 强制保留空值(可选)
若仍存在空值被过滤的情况,可使用modify-overwrite-beta操作配合isNull函数强制保留:
{ "operation": "modify-overwrite-beta", "spec": { "EventDateTime": { "*": "=isNull(@(1)) ? null : @(1)" }, "LatestEventDateTime": { "*": "=isNull(@(1)) ? null : @(1)" } } }
完整Jolt规范示例
将上述步骤组合,完整规范如下:
[ // 初始化数组占位 { "operation": "default", "spec": { "EventDateTime": [null, null, null, null], "LatestEventDateTime": [null, null, null, null] } }, // 映射原始数据 { "operation": "shift", "spec": { "events": { "*": { "EventDateTime": "EventDateTime[&1]", "LatestEventDateTime": "LatestEventDateTime[&1]" } } } }, // 强制保留空值 { "operation": "modify-overwrite-beta", "spec": { "EventDateTime": { "*": "=isNull(@(1)) ? null : @(1)" }, "LatestEventDateTime": { "*": "=isNull(@(1)) ? null : @(1)" } } } ]
注意事项
- 调整
default中的数组长度以匹配预期输出的元素数量 - 若你的嵌套路径与示例不同,需修改
shift操作中的路径映射 - 如果有具体的输入JSON和现有Jolt规范,可以提供更精准的定制化修正
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

