【问题标题】:Combining the JSON array from different parent Array in mule dataweave在 mule dataweave 中组合来自不同父数组的 JSON 数组
【发布时间】:2018-06-27 05:14:25
【问题描述】:

我有一个像下面这样的 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

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

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

    您可以找到有关后代选择器here 的信息。以下是 MuleSoft 的官方说法:

    [后代选择器]使用..形式应用于上下文,并检索当前上下文下子树中所有匹配键:值对的值。无论这些字段的组织结构如何,它们都位于输出中的同一级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 2022-01-09
      • 2022-01-06
      • 2021-10-27
      相关资源
      最近更新 更多