编写Jolt转换规格,将含数组字段的JSON转为多对象数组
实现需求的Jolt转换规格
输入示例
{ "KUNNR": "123456789", "NAME1": "Milchwerke \"Mittelelbe\" GmbH", "NAME2": "Milchwerke \"Mittelelbe\" GmbH", "NAME3": "Milchwerke \"Mittelelbe\" GmbH", "NAME4": "Milchwerke \"Mittelelbe\" GmbH", "LAND1": "DE", "VKORG": "1255", "VTWEG": "00", "SPART": "00", "PARVW": [ "WE", "WE" ], "PARZA": [ "000", "000" ], "KUNN2": [ "0000045959", "0000045959" ] }
期望输出示例
[ { "KUNNR": "123456789", "NAME1": "Milchwerke \"Mittelelbe\" GmbH", "NAME2": "Milchwerke \"Mittelelbe\" GmbH", "NAME3": "Milchwerke \"Mittelelbe\" GmbH", "NAME4": "Milchwerke \"Mittelelbe\" GmbH", "LAND1": "DE", "VKORG": "1255", "VTWEG": "00", "SPART": "00", "PARVW": "WE", "PARZA": "000", "KUNN2": "0000045959" }, { "KUNNR": "123456789", "NAME1": "Milchwerke \"Mittelelbe\" GmbH", "NAME2": "Milchwerke \"Mittelelbe\" GmbH", "NAME3": "Milchwerke \"Mittelelbe\" GmbH", "NAME4": "Milchwerke \"Mittelelbe\" GmbH", "LAND1": "DE", "VKORG": "1255", "VTWEG": "00", "SPART": "00", "PARVW": "WE", "PARZA": "000", "KUNN2": "0000045959" } ]
正确的Jolt转换规格
[ { "operation": "shift", "spec": { "KUNNR|NAME1|NAME2|NAME3|NAME4|LAND1|VKORG|VTWEG|SPART": "common.&", "PARVW": { "*": { "$": "&1.PARVW" } }, "PARZA": { "*": { "$": "&1.PARZA" } }, "KUNN2": { "*": { "$": "&1.KUNN2" } } } }, { "operation": "shift", "spec": { "*": { "@(2,common)": "&", "*": "&" }, "common": "" } }, { "operation": "shift", "spec": { "*": "[]" } } ]
转换逻辑说明
第一步Shift操作:
- 将所有非数组字段归类到
common临时节点,避免重复处理。 - 按数组索引把PARVW、PARZA、KUNN2的元素分别存入对应下标的节点中(如
0.PARVW、1.KUNN2)。
- 将所有非数组字段归类到
第二步Shift操作:
- 遍历每个索引节点,将
common中的所有字段复制到当前节点,与该节点的数组元素字段合并。 - 删除临时的
common节点,清理冗余数据。
- 遍历每个索引节点,将
第三步Shift操作:
- 将所有索引节点转换为根数组的元素,生成最终的数组结构。
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

