如何循环wso2 esb proxy-service接收的json有效负载

时间:2018-05-20 09:25:00

标签: json wso2 wso2esb mediator proxy-server

我使用wso2 esb构建代理服务。它向Google Books API发送REST请求并接收json。在这个Json中,有一个动态数组,我必须解析为XML。我似乎无法弄清楚我该怎么做。

收到json有效载荷

"items": [
  {
   "volumeInfo": {
    "title": "Web Services",
    "authors": [
     "Gustavo Alonso",
     "Fabio Casati",
     "Harumi Kuno",
     "Vijay Machiraju"
    ],
    "publisher": "Springer Science & Business Media",
    "publishedDate": "2003-09-04"
   ]
  }

如果你浏览上面收到的Json,它就像这样的东西[0] .authors [i]

这里作者[i]非常有活力,因为不同的书籍有不同的作者。

如何将此有效内容转换为XML,然后以XML格式发送到客户端

<items>
    <titie></title>
    <authors>
        <author></author>
        <author></author>
        <author></author>
        .
        .
        .
    </authors>
</items>

2 个答案:

答案 0 :(得分:0)

在结果中,您可以使用有效负载介体从JSON构造xml。

https://docs.wso2.com/display/ESB500/PayloadFactory+Mediator

答案 1 :(得分:0)

从JSON转换为XML时,我几乎总是这样使用。

首先将messageType设置为xml,您也可以设置ContentType但我不是100%确定是否需要

<property name="messageType" scope="axis2" value="application/xml"/>
<property name="ContentType" scope="axis2" value="application/xml"/>

接下来使用带有封闭根元素的payload工厂,将媒体类型设置为XML

<payloadFactory media-type="xml">
    <format>
        <SomeRequest xmlns="yourXMLNamespace">
            $1
        </SomeRequest>
    </format>
    <args>
        <arg evaluator="json" expression="."/>
    </args>
</payloadFactory>

现在你会看到这样的东西。

<SomeRequest>
    <items>
        <volumeInfo></volumeInfo>
        <title>Web Services</title>
        <authors>Gustavo Alonso</authors>
        <authors>Fabio Casati</authors>
        <authors>Harumi Kuno</authors>
        <authors>Vijay Machiraju</authors>
        <publisher>Springer Science & Business Media</publisher>
        <publishedDate>2003-09-04</publishedDate>
    </items>
    <items>
        ...
    </items>
</SomeRequest>

看看它如何解开JSON数组,它使用数组名创建了多个元素。要从这里获得响应格式,您希望最简单的方法是使用xslt转换。

<xslt key="{name of your xslt transform file}"/>

然后你可以回复给客户。

可能值得查看wso2文档中的JSON支持页面。它介绍了如何将JSON转换为XML和从XML转换 https://docs.wso2.com/display/EI620/JSON+Support