[英]Combining the JSON array from different parent Array in mule dataweave
我有一个像下面的JSON
{
"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"
}
]
}
}
]
}
]
}
在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>
我需要像下面
<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>
这个XPath payload.packages[0].screenings.data.educationHistory map {
通过循环screening
不educationHistory
您需要使用后代选择器..
来一次获取所有educationHistory
值。 这将从父元素(在本例中为payload.packages[0]
)中搜索整棵树,并获取每个匹配的子元素(在本例中为educationHistory
)。 由于educationHistory
在这两个实例中都是一个数组,因此将返回一个数组数组,因此我们需要使用flatten
因此我们拥有一个对象数组:
%dw 1.0
%output application/xml
%var employers = flatten payload.packages[0]..educationHistory
---
{
EmploymentHistory: {
(employers map {
Employer: {
EmployerName: {
School: $.school
}
}
})
}
}
您可以在此处找到有关后代选择器的信息 。 这是来自MuleSoft的官方词汇:
[后代选择器]使用
..
格式应用于上下文,并在当前上下文下检索子树中所有匹配的key:value对的值。 无论这些字段的组织层次结构如何,都将它们放在输出中的同一级别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.