繁体   English   中英

在m子dataweave中组合来自不同父数组的JSON数组

[英]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 {通过循环screeningeducationHistory

您需要使用后代选择器..来一次获取所有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM