我正在学习DW2.0,并试图将JSON转换为下面的XML。我尝试使用Map,但无法获得所需的o/p。需要任何可以用来解决此问题的函数的建议。
JSON:
[{
"id": "M-1",
"type": "Product",
"pricingDetails": [{
"uLow": 2,
"uHigh": 2,
"unitPrice": 0
}]
},
{
"id": "B-2",
"pricingDetails": [{
"uLow": 1000,
"uHigh": 1000,
"unitPrice": 0
},
{
"uLow": 1000,
"uHigh": null,
"unitPrice": 0.56
}
]
}
]o/p XML:
<ListOfPInfo>
<pInfo>
<pId>M-1</pId>
<uLow> 2</uLow
<uHigh>2</uHigh>
<unitPrice>0<unitPrice>
</pInfo>
<pInfo>
<pId>B-2</pId>
<uLow> 1000</uLow
<uHigh>1000</uHigh>
<unitPrice>0<unitPrice>
</pInfo>
<pInfo>
<pId>B-2</pId>
<uLow> 1000</uLow
<uHigh></uHigh>
<unitPrice>0.56<unitPrice>
</pInfo>
</ListOfPInfo>发布于 2021-10-14 21:46:06
您需要在主项目之后映射定价详细信息,并将数组转换为对象。一开始可能有点不直观,但我使用reduce()来做后面的事情。
%dw 2.0
output application/xml
---
{
ListOfPInfo: (payload flatMap ((item, index) ->
item.pricingDetails
map {
pInfo: {
pId: item.id,
uLow: $.uLow,
uHigh: $.uHigh,
unitPrice: $.unitPrice
}
} )
reduce ((item, accumulator={}) -> accumulator ++ item)
)
}输出:
<?xml version='1.0' encoding='UTF-8'?>
<ListOfPInfo>
<pInfo>
<pId>M-1</pId>
<uLow>2</uLow>
<uHigh>2</uHigh>
<unitPrice>0</unitPrice>
</pInfo>
<pInfo>
<pId>B-2</pId>
<uLow>1000</uLow>
<uHigh>1000</uHigh>
<unitPrice>0</unitPrice>
</pInfo>
<pInfo>
<pId>B-2</pId>
<uLow>1000</uLow>
<uHigh/>
<unitPrice>0.56</unitPrice>
</pInfo>
</ListOfPInfo>发布于 2021-10-14 21:42:41
XML输出是最复杂的输出之一。需要考虑的是,在XML中没有数组,而是具有重复键的对象(这是JSON不支持的)。注意集合的{(...)}包装,它基本上将内部创建的所有对象合并为一个对象。
%dw 2.0
output application/xml
---
{
ListOfPInfo: {(payload flatMap ((item, i1) ->
item.pricingDetails
map (pricingDetail, i2) -> {
pInfo: {
pId: item.id,
uLow: pricingDetail.uLow,
uHigh: pricingDetail.uHigh,
unitPrice: pricingDetail.unitPrice
}
}
))}
}您也可以查看此博客条目https://blogs.mulesoft.com/dev-guides/how-to-tutorials/dataweave-generating-xml/
编辑:谢谢@aled,我错过了价格细节可以包含多个条目,所以我需要用map和flatMap做一个双循环。
https://stackoverflow.com/questions/69577367
复制相似问题