Jolt规范适配单/多元素PartnerFunction数组转换问题求助
Jolt兼容单对象/多元素数组的转换方案
问题说明
现有Jolt转换规范仅能正确处理PartnerFunction为多元素数组的场景,当PartnerFunction为单个对象时转换失败,需兼容两种输入格式。
输入示例
输入1(多元素数组场景)
{ "CustomerMaster": { "Rootnode": { "KUNNR": "123", "NAME1": "XXXX", "LAND1": "SE", "SalesArea": { "VKORG": "1301", "VTWEG": "10", "SPART": "00", "AUFSD": "", "FAKSD": "", "LIFSD": "", "PartnerFunction": [ { "PARVW": "RE", "PARZA": "000", "KUNN2": "1231" }, { "PARVW": "RE", "PARZA": "000", "KUNN2": "1232" } ] } } } }
输入2(单对象场景)
{ "CustomerMaster": { "Rootnode": { "KUNNR": "123", "NAME1": "XXXX", "LAND1": "SE", "SalesArea": { "VKORG": "1301", "VTWEG": "10", "SPART": "00", "AUFSD": "", "FAKSD": "", "LIFSD": "", "PartnerFunction": { "PARVW": "RE", "PARZA": "000", "KUNN2": "1231" } } } } }
原有Jolt规范(仅支持多元素数组)
[ { "operation": "shift", "spec": { "CustomerMaster": { "Rootnode": { "SalesArea": { "PartnerFunction": { "*": { "@(3,KUNNR)": "[&1].KUNNR", "@(3,NAME1)": "[&1].NAME1", "@(3,NAME2)": "[&1].NAME2", "@(3,NAME3)": "[&1].NAME3", "@(3,NAME4)": "[&1].NAME4", "@(3,LAND1)": "[&1].LAND1", "@(2,VKORG)": "[&1].VKORG", "@(2,VTWEG)": "[&1].VTWEG", "@(2,SPART)": "[&1].SPART", "PARVW": "[&1].PARVW", "PARZA": "[&1].PARZA", "KUNN2": "[&1].KUNN2" } } } } } } } ]
解决方案
在原有转换逻辑前添加cardinality操作,将PartnerFunction统一转换为数组格式(单对象自动包装为数组,多元素数组保持不变),后续复用原有shift逻辑即可兼容两种场景:
[ // 统一PartnerFunction为数组格式,兼容单对象/多元素数组 { "operation": "cardinality", "spec": { "CustomerMaster": { "Rootnode": { "SalesArea": { "PartnerFunction": "MANY" } } } } }, // 原有shift转换逻辑 { "operation": "shift", "spec": { "CustomerMaster": { "Rootnode": { "SalesArea": { "PartnerFunction": { "*": { "@(3,KUNNR)": "[&1].KUNNR", "@(3,NAME1)": "[&1].NAME1", "@(3,NAME2)": "[&1].NAME2", "@(3,NAME3)": "[&1].NAME3", "@(3,NAME4)": "[&1].NAME4", "@(3,LAND1)": "[&1].LAND1", "@(2,VKORG)": "[&1].VKORG", "@(2,VTWEG)": "[&1].VTWEG", "@(2,SPART)": "[&1].SPART", "PARVW": "[&1].PARVW", "PARZA": "[&1].PARZA", "KUNN2": "[&1].KUNN2" } } } } } } } ]
说明
cardinality操作的"MANY"参数会自动处理两种情况:
- 若
PartnerFunction是单对象,将其包装为仅含该对象的数组 - 若
PartnerFunction已是数组,则保持原数组结构不变
这样后续的shift逻辑无需修改,即可对两种输入产生一致的转换结果。
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

