在mule dataweave中组合来自不同父数组的JSON数组
我有一个类似下面的JSON在mule dataweave中组合来自不同父数组的JSON数组,mule,dataweave,Mule,Dataweave,我有一个类似下面的JSON { "packages": [ { "screenings": [ { "data": { "educationHistory": [ { "school": "Test educat
{
"packages": [
{
"screenings": [
{
"data": {
"educationHistory": [
{
"school": "Test education 4"
},
{
"school": "Test education 4"
}
]
}
},
{
"data": {
"educationHistory": [
{
"major": [
"Business Admin."
],
"school": "Test education 1"
},
{
"major": [
"Business Admin."
],
"school": "Test education 1"
}
]
}
}
]
}
]
}
<ns0:EmploymentHistory>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 4</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 4</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 1</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 1</school>
</ns0:EmployerName>
</ns0:Employer>
</ns0:EmploymentHistory>
在dataweave中,我是这样写的
ns0#EmploymentHistory: {(
payload.packages[0].screenings.data.educationHistory map {
ns0#Employer: {
ns0#EmployerName: $.school
}
}
)}
我得到这样的输出
<ns0:EmploymentHistory>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 4</school>
<school>Test education 4</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 1</school>
<school>Test education 1</school>
</ns0:EmployerName>
</ns0:Employer>
</ns0:EmploymentHistory>
测试教育4
测试教育4
测试教育1
测试教育1
我需要像下面这样的
{
"packages": [
{
"screenings": [
{
"data": {
"educationHistory": [
{
"school": "Test education 4"
},
{
"school": "Test education 4"
}
]
}
},
{
"data": {
"educationHistory": [
{
"major": [
"Business Admin."
],
"school": "Test education 1"
},
{
"major": [
"Business Admin."
],
"school": "Test education 1"
}
]
}
}
]
}
]
}
<ns0:EmploymentHistory>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 4</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 4</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 1</school>
</ns0:EmployerName>
</ns0:Employer>
<ns0:Employer>
<ns0:EmployerName>
<school>Test education 1</school>
</ns0:EmployerName>
</ns0:Employer>
</ns0:EmploymentHistory>
测试教育4
测试教育4
测试教育1
测试教育1
此xpath
payload.packages[0].screenings.data.educationHistory映射{
循环通过筛选
非教育历史
您需要使用后代选择器。
,一次获取所有教育历史
值。这将从父元素搜索整个树(在本例中为有效负载.packages[0]
),并获取每个匹配的子元素(在本例中为educationHistory
)。由于educationHistory
在这两个实例中都是一个数组,因此这将返回一个数组,因此我们需要使用展平
,因此我们有一个对象数组:
%dw 1.0
%output application/xml
%var employers = flatten payload.packages[0]..educationHistory
---
{
EmploymentHistory: {
(employers map {
Employer: {
EmployerName: {
School: $.school
}
}
})
}
}
您可以找到有关后代选择器的信息。以下是MuleSoft的官方词汇:
[子体选择器]使用。
的形式应用于上下文,并检索当前上下文下子树中所有匹配键:值对的值。无论这些字段组织在何种层次结构中,它们都位于输出中的同一级别