JOLT TRANSFORM:拆分数组元素并分组生成WLSPDEXTREF001结构
JOLT转换方案:拆分分组clientId与demandNo为多对象数组
核心思路
通过shift操作提取所有带数字后缀的clientIdN和demandNoN字段,将同后缀的字段配对成单个对象,再按需清理无效元素,最终生成目标多对象数组结构。
步骤1:提取并配对同后缀字段
使用shift转换,把每个clientIdN和demandNoN映射到同一个数字后缀对应的数组索引对象中:
[ { "operation": "shift", "spec": { "clientId*": { "$": "WLSPDEXTREF001[&1].clientId" }, "demandNo*": { "$": "WLSPDEXTREF001[&1].demandNo" }, "*": "&" // 保留其他非目标字段 } } ]
步骤2:清理空元素(可选)
如果存在后缀不连续的情况(比如仅存在clientId1但无demandNo1),会生成空对象,可添加remove操作清理:
{ "operation": "remove", "spec": { "WLSPDEXTREF001": { "*": { "": "" // 删除空对象内的空字段,或直接移除空对象 } } } }
完整转换Spec示例
[ { "operation": "shift", "spec": { "clientId*": { "$": "WLSPDEXTREF001[&1].clientId" }, "demandNo*": { "$": "WLSPDEXTREF001[&1].demandNo" }, "*": "&" } }, { "operation": "remove", "spec": { "WLSPDEXTREF001": { "*": { "": "" } } } } ]
示例验证
输入JSON
{ "clientId1": "CLIENT_001", "demandNo1": "DEMAND_001", "clientId2": "CLIENT_002", "demandNo2": "DEMAND_002", "orderId": "ORD_12345" }
输出JSON
{ "orderId": "ORD_12345", "WLSPDEXTREF001": [ { "clientId": "CLIENT_001", "demandNo": "DEMAND_001" }, { "clientId": "CLIENT_002", "demandNo": "DEMAND_002" } ] }
关键语法说明
&1:在shift操作中,指代当前匹配的通配符部分(即clientId*里的数字后缀N),确保同后缀的clientId和demandNo映射到同一个数组索引。"$": "...":取当前字段的值作为目标字段的值。"*": "&":保留所有未被匹配的原始字段,避免丢失其他业务数据。
内容的提问来源于stack exchange,提问作者SATHK
相关产品推荐
相关产品推荐

