Jolt转换字段填充异常:基于mobile存在性的嵌套条件映射问题
Jolt JSON转换解决方案
需求回顾
- 仅当
code与number拼接生成的mobile字段非空时,才填充eventData.Records下的mobile、status、country、pukcode字段 pukcode仅在输入有有效值(非null、非空字符串)时才填充,不能出现null值
正确的Jolt Spec
[ { "operation": "shift", "spec": { "code": "temp.code", "number": "temp.number", "status": "temp.status", "country": "temp.country", "pukcode": { // 仅保留非空的pukcode "*": "temp.pukcode" } } }, { "operation": "modify-overwrite-beta", "spec": { "temp": { "mobile": "=concat(@(1.code), @(1.number))" } } }, { "operation": "shift", "spec": { "temp": { "mobile": { // 仅当mobile非空时,才映射Records下的字段 "*": { "@(2.mobile)": "eventData.Records.mobile", "@(2.status)": "eventData.Records.status", "@(2.country)": "eventData.Records.country", "@(2.pukcode)": "eventData.Records.pukcode" } } } } }, { "operation": "remove", "spec": { "temp": "" } } ]
测试用例验证
测试用例1:输入含有效pukcode
输入
{ "code": "+86", "number": "13800138000", "status": "ACTIVE", "country": "CN", "pukcode": "12345678" }
预期输出
{ "eventData": { "Records": { "mobile": "+8613800138000", "status": "ACTIVE", "country": "CN", "pukcode": "12345678" } } }
测试用例2:输入pukcode为null/空
输入
{ "code": "+86", "number": "13800138000", "status": "ACTIVE", "country": "CN", "pukcode": null }
预期输出
{ "eventData": { "Records": { "mobile": "+8613800138000", "status": "ACTIVE", "country": "CN" } } }
测试用例3:mobile拼接后为空(code或number为空)
输入
{ "code": "", "number": "", "status": "ACTIVE", "country": "CN", "pukcode": "12345678" }
预期输出
{}
关键逻辑说明
- 第一步Shift:先把需要的字段暂存到
temp节点,同时通过"*": "temp.pukcode"过滤掉null/空的pukcode(如果pukcode是null,这个规则不会匹配,也就不会存入temp) - 第二步Modify:拼接生成
mobile字段 - 第三步Shift:通过
mobile的"*"匹配规则(仅当mobile非空时触发),将temp中的字段映射到eventData.Records下,此时pukcode只有在有效时才会被映射 - 第四步Remove:清理临时的
temp节点
内容的提问来源于stack exchange,提问作者krish darling
相关产品推荐
相关产品推荐

