Mule 4中拆分JSON数组:将coordinates转为独立字段
问题描述
需要将JSON payload中的coordinates数组拆分为两个独立字段coordinate1和coordinate2,原payload如下:
{ "reporting_user": null, "mission_type": null, "id": 171950377, "campaign_id": 43524, "place_id": 542543, "user_id": 23654366, "state": "completed", "created_at": "2023-03-28T11:52:01.501-04:00", "updated_at": "2023-03-28T11:52:34.154-04:00", "expires_at": "2023-04-07T11:52:00.000-04:00", "completed_at": "2023-03-28T11:52:33.000-04:00", "coordinates": [ 25.12345672910156, -97.66523709893123 ], "started_at": "2023-03-28T11:52:00.000-04:00", "location_timestamp": null, "location_accuracy": null, "completed_coordinates": [ 25.12345672910156, -97.66522805987456 ], "my_gsc_completed": null, "distance_to_place": "0.0123454913380641" }
尝试了以下DataWeave代码但未成功:
%dw 2.0 output application/json fun nameSplit(name) = name splitBy , --- payload.data map { "miles": $.reporting_user, "mission_type": $.mission_type, "id": $.id, "campaign_id": $.campaign_id, "place_id": $.place_id, "user_id": $.user_id, "state": $.state, "created_at": $.created_at, "updated_at": $.updated_at, "expires_at": $.expires_at, "completed_at": $.completed_at, "coordinates1": nameSplit($.coordinates)[0], "coordinates2": nameSplit($.coordinates)[1], "started_at": $.started_at, "location_timestamp": $.location_timestamp, "location_accuracy": $.location_accuracy, "completed_coordinates": $.completed_coordinates, "my_gsc_completed": $.my_gsc_completed, "distance_to_place": $.distance_to_place }
问题分析
原代码存在几个关键错误:
- 错误引用payload结构:给定的payload是单个JSON对象,不存在
data字段,无需使用map操作(map仅用于数组遍历)。 - 错误处理数组:
coordinates本身就是数组类型,不需要用splitBy拆分字符串,直接通过索引[0]、[1]即可获取对应元素。 - 冗余函数:自定义的
nameSplit函数完全没必要,反而会因为传入数组而非字符串导致错误。 - 字段名错误:原代码中
"miles": $.reporting_user是无意义的字段名,应该保留原字段名reporting_user。
修正后的DataWeave代码
%dw 2.0 output application/json --- { reporting_user: payload.reporting_user, mission_type: payload.mission_type, id: payload.id, campaign_id: payload.campaign_id, place_id: payload.place_id, user_id: payload.user_id, state: payload.state, created_at: payload.created_at, updated_at: payload.updated_at, expires_at: payload.expires_at, completed_at: payload.completed_at, coordinate1: payload.coordinates[0], coordinate2: payload.coordinates[1], started_at: payload.started_at, location_timestamp: payload.location_timestamp, location_accuracy: payload.location_accuracy, completed_coordinates: payload.completed_coordinates, my_gsc_completed: payload.my_gsc_completed, distance_to_place: payload.distance_to_place }
代码说明
- 直接处理单个JSON对象,无需遍历操作。
- 直接通过数组索引
payload.coordinates[0]和payload.coordinates[1]提取坐标值,赋值给新字段coordinate1和coordinate2。 - 保留原payload中所有其他字段的正确映射。
内容的提问来源于stack exchange,提问作者ilya.fastiv
相关产品推荐
相关产品推荐

