如何用Jolt Transform保留原数据并追加提取的EDI数据字段?
Jolt Transform 解决方案:保留原始数据并追加提取字段
以下是实现需求的Jolt规范,既能完整保留原始数据结构,又能新增ext对象并填充指定提取字段:
[ // 第一步:原样保留所有原始数据 { "operation": "shift", "spec": { "*": "&" } }, // 第二步:提取subscriber字段到ext对象 { "operation": "shift", "spec": { "@": "&", // 保留已有数据 "segments": { "*": { "REF01": { "0F": { "@(2,REF02)": "ext.subscriber" } } } } } }, // 第三步:提取start字段到ext对象 { "operation": "shift", "spec": { "@": "&", // 保留已有数据(含原始数据和已添加的subscriber) "loops": { "*": { "loops": { "*": { "id": { "2300": { "segments": { "*": { "DTP01": { "348": { "@(2,DTP03)": "ext.start" } } } } } } } } } } } } ]
规则说明
- 第一步:通过
shift操作将根节点下所有字段原样保留,确保后续操作不会丢失原有数据。 - 第二步:遍历根节点的
segments数组,匹配REF01值为0F的元素,将其对应的REF02值赋值给ext.subscriber,同时保留所有已有数据。 - 第三步:遍历根节点的
loops数组,先找到id为2100的loop,再深入其子loops找到id为2300的loop,最后在其segments中匹配DTP01值为348的元素,将对应的DTP03值赋值给ext.start,全程保留已有数据。
输入示例
{ "id": "2000", "segments": [ { "REF02": "xxxxxxxxxxxx", "REF01": "0F", "id": "REF" }, { "REF02": "yyyyyyyyyyyy", "REF01": "1L", "id": "REF" } ], "loops": [ { "id": "2100", "segments": [] }, { "id": "2100", "segments": [], "loops": [ { "id": "2300", "segments": [ { "DTP01": "348", "DTP03": "20220101", "DTP02": "D8", "id": "DTP" }, { "DTP01": "349", "DTP03": "20221231", "DTP02": "D8", "id": "DTP" } ] } ] } ] }
输出示例
{ "ext": { "subscriber": "xxxxxxxxxxxx", "start": "20220101" }, "id": "2000", "segments": [ { "REF02": "xxxxxxxxxxxx", "REF01": "0F", "id": "REF" }, { "REF02": "yyyyyyyyyyyy", "REF01": "1L", "id": "REF" } ], "loops": [ { "id": "2100", "segments": [] }, { "id": "2100", "segments": [], "loops": [ { "id": "2300", "segments": [ { "DTP01": "348", "DTP03": "20220101", "DTP02": "D8", "id": "DTP" }, { "DTP01": "349", "DTP03": "20221231", "DTP02": "D8", "id": "DTP" } ] } ] } ] }
内容的提问来源于stack exchange,提问作者Abhai Raj Llewellyn
相关产品推荐
相关产品推荐

