求Jolt Spec:计算列表中指定键对应重复值的总和
Jolt转换方案:计算特定类型调整金额总和
需求说明
遍历输入列表中的每个对象,针对其中的returnItemAdjustments数组,筛选出returnAdjustmentTypeId等于RET_SALES_TAX_ADJ的条目,将这些条目的amount字段求和,最终输出包含原对象returnId和求和结果returnTax的对象列表。
输入示例
[ { "returnId": "10051", "returnItemAdjustments": [ { "returnItemSeqId": "00001", "amount": 28.64, "returnAdjustmentTypeId": "RET_SALES_TAX_ADJ", "description": "Return Sales Tax", "createdDate": null, "returnId": "10051", "returnAdjustmentId": "10051", "comments": "Return Sales Tax", "shipGroupSeqId": null }, { "returnItemSeqId": "00001", "amount": 58.64, "returnAdjustmentTypeId": "RET_SALES_TAX_ADJ", "description": "Return Sales Tax", "createdDate": null, "returnId": "10051", "returnAdjustmentId": "10051", "comments": "Return Sales Tax", "shipGroupSeqId": null } ] }, { "returnId": "10051", "returnItemAdjustments": [ { "returnItemSeqId": "00002", "amount": 38.64, "returnAdjustmentTypeId": "RET_SALES_TAX_ADJ", "description": "Return Sales Tax", "createdDate": null, "returnId": "10051", "returnAdjustmentId": "10051", "comments": "Return Sales Tax", "shipGroupSeqId": null } ] } ]
预期输出
[ { "returnId": "10051", "returnTax": 87.28 }, { "returnId": "10051", "returnTax": 38.64 } ]
Jolt转换Spec
[ // 提取每个return对象的returnId及符合条件的金额 { "operation": "shift", "spec": { "*": { "returnId": "[&1].returnId", "returnItemAdjustments": { "*": { "returnAdjustmentTypeId": { "RET_SALES_TAX_ADJ": { "@(2,amount)": "[&4].taxAmounts[]" } } } } } } }, // 对金额数组求和得到returnTax { "operation": "modify-overwrite-beta", "spec": { "*": { "returnTax": "=sum(@(1,taxAmounts))" } } }, // 移除临时字段,整理最终结构 { "operation": "shift", "spec": { "*": { "returnId": "[&1].returnId", "returnTax": "[&1].returnTax" } } } ]
转换步骤解释
- 第一步(Shift):遍历输入列表的每个元素,保留
returnId;同时筛选returnItemAdjustments中类型为RET_SALES_TAX_ADJ的条目,将对应amount存入临时数组taxAmounts,确保金额与原returnId正确关联。 - 第二步(Modify):使用Jolt内置的
sum函数,对每个对象的taxAmounts数组求和,结果存入returnTax字段。 - 第三步(Shift):移除临时的
taxAmounts字段,仅保留returnId和returnTax,生成符合预期的输出结构。
内容的提问来源于stack exchange,提问作者Gurveen Kaur Bagga
相关产品推荐
相关产品推荐

