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

DataWeave中读取嵌套数组并生成目标JSON数组的实现方法

解决DataWeave遍历子数组生成目标JSON数组的问题

需要将包含子数组的源JSON数组转换为目标JSON数组,要求每个ExpenseReportDetailArray的子元素都对应目标数组中的一个对象,同时携带父级的ReportName信息。

源JSON数组

[
    {
        "ExpenseReportHeader": {
            "ReportName": "Jane Zoe ExpensesX"
        },
        "ExpenseReportDetailArray": [
            {
                "CityStart": "CLT",
                "CityEnd": "AUS"
            },
            {
                "CityStart": "AUS",
                "CityEnd": "CLT"
            }
        ]
    },
    {
        "ExpenseReportHeader": {
            "ReportName": "Jane Zoe ExpensesY"
        },
        "ExpenseReportDetailArray": [{
            "CityStart": "CLT",
            "CityEnd": "AUS"
        }]
    }
]

目标JSON数组

[
    {
        "Name": "Jane Zoe ExpensesX",
        "SourceCity": "CLT",
        "DestinationCity": "AUS"
    },
    {
        "Name": "Jane Zoe ExpensesX",
        "SourceCity": "AUS",
        "DestinationCity": "CLT"
    },
    {
        "Name": "Jane Zoe ExpensesY",
        "SourceCity": "CLT",
        "DestinationCity": "AUS"
    }
]

错误的DataWeave代码

%dw 2.0
output application/java
---
payload map ( payload01 , indexOfPayload01 ) -> {
    Name: payload01.ExpenseReportHeader.ReportName,
    payload01 map () -> {
        SourceCity: payload01.ExpenseReportDetailArray.CityStart,
        DestinationCity: payload01.ExpenseReportDetailArray.CityEnd
    }
}

错误原因:

  • 使用map嵌套会生成嵌套结构的数组,无法得到扁平化的目标数组
  • 内层map遍历的是父对象而非子数组ExpenseReportDetailArray,无法正确获取子元素的城市字段

正确的DataWeave代码

%dw 2.0
output application/json // 若需输出Java可改为application/java
---
payload flatMap (headerItem) -> 
    headerItem.ExpenseReportDetailArray map (detailItem) -> {
        Name: headerItem.ExpenseReportHeader.ReportName,
        SourceCity: detailItem.CityStart,
        DestinationCity: detailItem.CityEnd
    }

代码说明:

  1. flatMap:遍历源数组的每个父对象,将每个父对象生成的子数组合并为一个单一数组,实现扁平化输出
  2. 内层map:遍历当前父对象的ExpenseReportDetailArray子数组,为每个子元素生成目标对象
  3. 每个目标对象中,Name取自父对象的ReportName,SourceCity和DestinationCity取自当前子元素的对应字段

内容的提问来源于stack exchange,提问作者Priya Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:43:22