EDI解析JSON数据的Jolt数组转数组转换问题求助
EDI JSON数据Jolt转换修正方案
源EDI JSON数据
{ "INS-2000_loop": [ { "HD-2300_loop": [ { "COB-2320_loop": [ { "COB_01": "P", "COB_02": "ABC10XX0092001", "COB_03": "1" }, { "DTP_01": "344", "DTP_02": "D8", "DTP_03": "20240101" }, { "DTP_01": "345", "DTP_02": "D8", "DTP_03": "20240101" } ] }, { "COB-2320_loop": [ { "COB_01": "P", "COB_02": "ABC10XX0092000", "COB_03": "1" }, { "DTP_01": "344", "DTP_02": "D8", "DTP_03": "20230101" }, { "DTP_01": "345", "DTP_02": "D8", "DTP_03": "20230101" } ] }, { "COB-2320_loop": [ { "COB_01": "P", "COB_02": "ABC10XX00920", "COB_03": "1" }, { "DTP_01": "344", "DTP_02": "D8", "DTP_03": "20220101" }, { "DTP_01": "345", "DTP_02": "D8", "DTP_03": "20220101" } ] } ] } ] }
当前使用的Jolt转换规范
[ { "operation": "shift", "spec": { "*": { "*": { "HD-2300_loop": { "*": { "COB-2320_loop": { "*": { "COB_01": "&6[&5].coverages.cobs.[#].responsibility", "COB_02": "&6[&5].coverages.cobs.[#].id", "COB_03": "&6[&5].coverages.cobs.[#].code", "DTP_01": { "344": { "@(2,DTP_03)": "&8[&7].coverages.cobs.[#].start" }, "345": { "@(2,DTP_03)": "&8[&7].coverages.cobs.[#].end" } } } } } } } } } } ]
错误输出结果
{ "INS-2000_loop" : [ { "coverages" : { "cobs" : [ { "responsibility" : [ "P", "P", "P" ], "id" : [ "ABC10XX0092001", "ABC10XX0092000", "ABC10XX00920" ], "code" : [ "1", "1", "1" ], "start" : [ "20240101", "20230101", "20220101" ], "end" : [ "20240101", "20230101", "20220101" ] } ] } } ] }
期望输出结果
{ "coverages": { "cobs": [ { "responsibility": "P", "id": "ABC10XX0092001", "code": "1", "start": "20240101", "end": "20240101" }, { "responsibility": "P", "id": "ABC10XX0092000", "code": "1", "start": "20230101", "end": "20230101" }, { "responsibility": "P", "id": "ABC10XX00920", "code": "1", "start": "20220101", "end": "20220101" } ] } }
注:原期望输出中日期存在笔误,已根据源数据修正为对应年份的日期
修正后的Jolt转换规范
[ { "operation": "shift", "spec": { "INS-2000_loop": { "*": { "HD-2300_loop": { "*": { "COB-2320_loop": { "[0]": { "COB_01": "coverages.cobs.[&3].responsibility", "COB_02": "coverages.cobs.[&3].id", "COB_03": "coverages.cobs.[&3].code" }, "*": { "DTP_01": { "344": { "@(2,DTP_03)": "coverages.cobs.[&5].start" }, "345": { "@(2,DTP_03)": "coverages.cobs.[&5].end" } } } } } } } } } } ]
方案说明
- 索引绑定修正:原规范中使用
[#]会取当前层级的元素索引,导致所有COB/DTP字段被聚合到同一个cobs元素。修正后使用[&3](或[&5],根据层级计数)绑定到HD-2300_loop的元素索引,确保每个HD-2300_loop对应的COB数据生成独立的cobs数组元素。 - COB字段定位:明确指定
COB-2320_loop的第一个元素([0])为COB字段所在对象,避免遍历所有子元素时重复处理。 - 兼容性处理:该规范支持源数据中0个或多个
COB-2320_loop对象的场景,当数量为0时,cobs数组会为空。
内容的提问来源于stack exchange,提问作者Abhai Raj Llewellyn
相关产品推荐
相关产品推荐

