我正在尝试从 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
}
}
您可以使用 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"
}
]
这可能是一个可以帮助您的选项。 输入
[
{
"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"
}
]