Jolt实操:如何为嵌套JSON添加字段及实现条件覆写
Jolt实战:嵌套JSON字段添加与条件覆写
问题1:如何为嵌套JSON结构添加字段?
要给嵌套对象添加字段,核心是用Jolt的移位(shift)操作定位目标嵌套路径,同时引用外部字段的值。
以你的需求为例,需将顶层SrcDo的值以sos为键,添加到PartyPostalAddress.item[*].PostalAddress下,可通过路径映射实现:
[ { "operation": "shift", "spec": { "PartyPostalAddress": { "item": { "*": { "LNCd": "PartyPostalAddress.item[&1].LNCd", "PostalAddress": { "@2,SrcDo": "PartyPostalAddress.item[&3].PostalAddress.sos", // 向上回溯2层获取顶层SrcDo的值 "*": "PartyPostalAddress.item[&3].PostalAddress.&" // 保留PostalAddress原有字段 } } } } } } ]
这里@2,SrcDo表示从当前节点(PostalAddress)向上跳2层到顶层,抓取SrcDo的值,再映射到目标路径的sos字段。
问题2:如何通过条件实现覆写操作?
条件覆写或字段过滤可结合Jolt的移位、修改操作实现:
- 若要移除字段,直接在移位规则中不映射该字段即可实现隐式移除;
- 若要基于字段值修改内容,可使用
modify-overwrite-beta操作配合条件表达式。
比如你需求中输入的ewc和BlBdrCd被移除,就是通过移位规则不映射这两个字段实现的。如果需要更复杂的条件逻辑,示例如下:
[ // 第一步:完成字段移位与添加 { "operation": "shift", "spec": { "PartyPostalAddress": { "item": { "*": { "LNCd": "PartyPostalAddress.item[&1].LNCd", "PostalAddress": { "@2,SrcDo": "PartyPostalAddress.item[&3].PostalAddress.sos", "*": "PartyPostalAddress.item[&3].PostalAddress.&" } } } } } }, // 第二步:条件覆写示例——若addrTyp为N则替换为Normal,否则保留原值 { "operation": "modify-overwrite-beta", "spec": { "PartyPostalAddress": { "item": { "*": { "LNCd": { "addrTyp": ["=eq(@(1,addrTyp), 'N')", "Normal", "@(1,addrTyp)"] } } } } } } ]
完整实操解决方案
结合你的输入输出需求,最终Jolt规则如下(实现sos字段添加、ewc和BlBdrCd移除):
[ { "operation": "shift", "spec": { "PartyPostalAddress": { "item": { "*": { "LNCd": "PartyPostalAddress.item[&1].LNCd", "PostalAddress": { "@2,SrcDo": "PartyPostalAddress.item[&3].PostalAddress.sos", "*": "PartyPostalAddress.item[&3].PostalAddress.&" } } } } } } ]
输入JSON
{ "ewc":true, "PartyPostalAddress": { "item": [ { "BlBdrCd": { "addrTyp": "N" }, "LNCd": { "addrTyp": "N" }, "PostalAddress": { "SrcAddrLn1": "1 KWN", "SrcAddrLn2": "Second Floor", "SrcAddrLn3": "1569 WQAS Blvd" } } ] }, "SrcDo": "N" }
输出JSON
{ "PartyPostalAddress": { "item": [ { "LNCd": { "addrTyp": "N" }, "PostalAddress": { "sos": "N", "SrcAddrLn1": "1 KWN", "SrcAddrLn2": "Second Floor", "SrcAddrLn3": "1569 WQAS Blvd" } } ] } }
内容的提问来源于stack exchange,提问作者Madhavi kurabalakota
相关产品推荐
相关产品推荐

