如何解决Dataweave 2.0 - XML 到 JSON 数组:跨不同 XML 结构按 id 分组
我正在尝试从数据结构 A 中实现类似数据结构 B 的内容。
不确定如何遍历 XML 结构,然后按
任何帮助/建议将不胜感激。
注意:需要空元素,即
谢谢
结构 A:
<root>
<TYPE_A>
<row id="0">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>123</ORDER_NUMBER>
</row>
</TYPE_A>
<TYPE_B/>
<TYPE_C>
<row id="0">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>123</ORDER_NUMBER>
</row>
<row id="1">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>789</ORDER_NUMBER>
</row>
<row id="2">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>555</ORDER_NUMBER>
</row>
</TYPE_C>
<TYPE_D>
<row id="0">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>555</ORDER_NUMBER>
</row>
<row id="1">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>123</ORDER_NUMBER>
</row>
<row id="2">
<MESSAGE>Unique Message</MESSAGE>
<ORDER_NUMBER>789</ORDER_NUMBER>
</row>
</TYPE_D>
</root>
结构 B:
[
{
"orderNumber": "123","type": "A","message": "Unique Message"
},{
"orderNumber": "123","type": "C",{
"orderNumber": "789",{
"orderNumber": "555","type": "D","message": "Unique Message"
}
]
解决方法
这是一个动态解决方案。首先过滤掉空对象(在本例中为 TYPE_B),获取根对象的键并通过它们进行映射。对于每种类型,获取 valuesOf
中相应对象的 rootData
,它将返回这些对象的数组。最后映射该集合并执行转换。
%dw 2.0
output application/json
var rootData = payload.root filterObject not isEmpty($)
---
keysOf(rootData) flatMap ((messageType,index) ->
valuesOf(rootData[messageType]) map ((order) ->
{
orderNumber: order."ORDER_NUMBER","type": upper(messageType[-1]),message: order."MESSAGE"
}
)
)
,
此解决方案适用于您,但前提是您知道所有类型
%dw 2.0
output application/json
---
orders: (if (payload.root.TYPE_A != null)
(payload.root.*TYPE_A map (object,index) -> {
orderNumber: object.row.ORDER_NUMBER,"type": "A",message: object.row.MESSAGE
}) else ([])) ++
(if (payload.root.TYPE_B != null)
(payload.root.*TYPE_B map (objectB,indexB) -> {
orderNumber: objectB.row.ORDER_NUMBER,"type": "B",message: objectB.row.MESSAGE
}
) else ([])) ++
(if (payload.root.TYPE_C != null)
(payload.root.*TYPE_C map (objectC,indexC) -> {
orderNumber: objectC.row.ORDER_NUMBER,"type": "C",message: objectC.row.MESSAGE
}
) else ([]))
,
这是另一种“动态”解决方案,选择性能最好的解决方案并使用它:
eb init
,
这是另一个动态解决方案
I am a noodle plant and my size is 0. I am at row 14,column 12.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。