You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:05:08