Dataweave 中的映射
Mapping in Dataweave
我必须在 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',如果是,那么我必须对这些元素执行相同的操作并用“。”加入他们
%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 '.'
}
选择所有PassData2节点
按腿排序(以防未排序)
执行减少以确保数组中的唯一元素是那些具有 Leg
顺序值的元素
将每个元素映射到它的 Data* 节点的串联,使用 : 作为分隔符
使用 .
加入最终数组
我必须在 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',如果是,那么我必须对这些元素执行相同的操作并用“。”加入他们
%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 '.'
}
选择所有PassData2节点
按腿排序(以防未排序)
执行减少以确保数组中的唯一元素是那些具有 Leg
顺序值的元素
将每个元素映射到它的 Data* 节点的串联,使用 : 作为分隔符
使用 .
加入最终数组