首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dataweave 2.0函数用于将JSON转换为XML

Dataweave 2.0函数用于将JSON转换为XML
EN

Stack Overflow用户
提问于 2021-10-14 21:09:13
回答 2查看 40关注 0票数 0

我正在学习DW2.0,并试图将JSON转换为下面的XML。我尝试使用Map,但无法获得所需的o/p。需要任何可以用来解决此问题的函数的建议。

JSON:

代码语言:javascript
复制
[{
        "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:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 21:46:06

您需要在主项目之后映射定价详细信息,并将数组转换为对象。一开始可能有点不直观,但我使用reduce()来做后面的事情。

代码语言:javascript
复制
%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)
    )
}

输出:

代码语言:javascript
复制
<?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>
票数 1
EN

Stack Overflow用户

发布于 2021-10-14 21:42:41

XML输出是最复杂的输出之一。需要考虑的是,在XML中没有数组,而是具有重复键的对象(这是JSON不支持的)。注意集合的{(...)}包装,它基本上将内部创建的所有对象合并为一个对象。

代码语言:javascript
复制
%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做一个双循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69577367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档