从 Dataweave 中的数组中的数组读取

问题描述 投票:0回答:2

我正在尝试从 JSON 源创建一个输出 JSON 数组对象,在父数组对象中包含子数组,但无法找到正确的数据编织来遍历子数组。目标 JSON 数组应该是来自源子数组 ExpenseReportDetailArray 的重复元素。有人可以帮我吗?这是带有子数组的源 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": "from source X",
  "SourceCity": "from source ExpenseReportDetailArray[x]",
  "DestinationCity": "from source ExpenseReportDetailArray[x]",
},
{
  "Name": "from source",
  "SourceCity": "from source ExpenseReportDetailArray[x+1]",
  "DestinationCity": "from source ExpenseReportDetailArray[x+1]",
},
{
  "Name": "from source Y",
  "SourceCity": "from source ExpenseReportDetailArray[y",
  "DestinationCity": "from source ExpenseReportDetailArray[y]",
}
]
%dw 2.0
output application/java
---
payload map ( payload01 , indexOfPayload01 ) -> {
    Name: payload01.ExpenseReportHeader.ReportName,
    payload01 map () -> {
        SourceCity: payload01.ExpenseReportDetailArray.CityStart,
        DestinationCity: payload01.ExpenseReportDetailArray.CityEnd
        
    }
}
dataweave
2个回答
1
投票

您可以使用 flatMap() 来避免嵌套数组。然后映射子数组中的每条记录,并在其中插入父项的名称。为了清楚起见,我使用 JSON 输出。您可以将其改回 Java:

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

输出(在输入中删除多余的逗号后):

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

0
投票

这可能是一个可以帮助您的选项。 输入

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

数据编织脚本:

%dw 2.0
output application/json
---
payload flatMap (report, index) -> {
    Name: if (report.ExpenseReportHeader.ReportName != null) "from source " ++ report.ExpenseReportHeader.ReportName else "from source",
    SourceCity: report.ExpenseReportDetailArray[0].CityStart,
    DestinationCity: report.ExpenseReportDetailArray[-1].CityEnd
}

输出:

[
  {
    "Name": "from source Jane Zoe ExpensesX",
    "SourceCity": "CLT",
    "DestinationCity": "CLT"
  },
  {
    "Name": "from source Jane Zoe ExpensesY",
    "SourceCity": "CLT",
    "DestinationCity": "AUS"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.