【问题标题】:Mapping in DataweaveDataweave 中的映射
【发布时间】:2019-01-03 08:06:57
【问题描述】:

我必须在 dataweave 中进行 XML 到 JSON 的映射。请求 XML 是:

<Root>
<AccRoot>
    <FinRoot>
        <FinData>
            <SomeValue>Test</SomeValue>
        </FinData>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>001</Leg>
                    <Data>Sample1</Data>
                    <Data2>Sample2</Data2>
                    <Data3>Sample3</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
            <PassData>
                <PassData2>
                    <Leg>002</Leg>
                    <Data>Sample21</Data>
                    <Data2>Sample22</Data2>
                    <Data3>Sample23</Data3>
                </PassData2>
            </PassData>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>003</Leg>
                    <Data>Sample31</Data>
                    <Data2>Sample32</Data2>
                    <Data3>Sample33</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>004</Leg>
                    <Data>Sample41</Data>
                    <Data2>Sample42</Data2>
                    <Data3>Sample43</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
    </FinEntity>
</PrimeEntity>
</Root>

生成的 JSON 应该是

Result: Sample1:Sample2:Sample3.Sample21:Sample22:Sample23.Sample31:Sample32:Sample33.Sample41:Sample42:Sample43

即我必须将'PassData2'中的所有记录与':'加入,然后我必须检查是否存在值为'+1'的'Leg',如果是,那么我必须对这些元素做同样的事情并将它们加入'。

【问题讨论】:

  • 感谢帮助!!
  • JSON 输出格式不正确。请更正它以便理解问题。

标签: dataweave mule-esb


【解决方案1】:
     %dw 1.0
 %output application/json
 ---
 {
     Result: payload.AccRoot.FinRoot..PassData2 
         orderBy ($.Leg as :number) 
         reduce ((val, acc = []) -> 
             (acc ++ [val]) when acc == [] or acc[-1].Leg as :number + 1 == val.Leg as :number 
             otherwise acc
         )
         map ([$.Data, $.Data2, $.Data3] joinBy ':')
         joinBy '.'
 }
  1. 选择所有 PassData2 节点

  2. 按 Leg 排序(以防它们无序)

  3. 执行 reduce 以确保数组中的唯一元素是 Leg 具有顺序值的元素

  4. 使用 : 作为分隔符将左侧的每个元素映射到其 Data* 节点的串联

  5. 使用 .

  6. 加入最终数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多