Jolt转换需求:通过fulfillmentId匹配对象替换订单字段
Jolt转换实现订单关联配送信息
可以通过两步Shift操作实现需求:先将fulfillments数组转换为以fulfillmentId为键的映射表,再将每个订单与对应的配送信息关联替换。
完整Jolt转换规则
[ { "operation": "shift", "spec": { "orders": "orders", "fulfillments": { "*": { "fulfillmentId": "fulfillmentMap.&", "@": "fulfillmentMap.&" } } } }, { "operation": "shift", "spec": { "orders": { "*": { "orderNo": "orders[&1].orderNo", "orderType": "orders[&1].orderType", "fulfillmentId": { "@(2,fulfillmentMap.&)": "orders[&2].fulfillment" } } } } } ]
转换步骤说明
第一步Shift:构建配送信息映射表
- 将原数据中的
fulfillments数组转换为fulfillmentMap对象,用每个配送项的fulfillmentId作为键,整个配送对象作为值,方便后续快速匹配。 - 同时保留原
orders数组,不做修改。
- 将原数据中的
第二步Shift:关联订单与配送信息
- 遍历每个订单,保留
orderNo和orderType字段; - 通过订单中的
fulfillmentId,从fulfillmentMap中取出对应的配送对象,赋值给新的fulfillment字段; - 自动丢弃原订单中的
fulfillmentId字段,最终得到期望的输出结构。
- 遍历每个订单,保留
测试验证
输入数据:
{"orders": [{"orderNo": "12345", "orderType": "online", "fulfillmentId": "123"}, {"orderNo": "54321", "orderType": "in store", "fulfillmentId": "987"}], "fulfillments": [{"fulfillmentId": "123", "address": "123 fake street", "type": "delivery"}, {"fulfillmentId": "987", "address": "321 main street", "type": "pickup"}]}
输出结果:
{"orders": [{"orderNo": "12345", "orderType": "online", "fulfillment": {"fulfillmentId": "123", "address": "123 fake street", "type": "delivery"}}, {"orderNo": "54321", "orderType": "in store", "fulfillment": {"fulfillmentId": "987", "address": "321 main street", "type": "pickup"}}]}
内容的提问来源于stack exchange,提问作者Yashkovich
相关产品推荐
相关产品推荐

