首页 > 解决方案 > 如何遍历 wso2 esb proxy-service 接收到的 json 有效负载

问题描述

我正在使用 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,它就像这个 items[0].authors[i]

这里的作者[i] 是非常动态的,因为不同的书有不同数量的作者。

如何将此有效负载转换为 XML,然后作为 XML 发送给客户端

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

标签: jsonwso2wso2esbmediatorproxy-server

解决方案


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

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

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

接下来使用带有封闭根元素的有效负载工厂,将媒体类型设置为 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 相互转换 https://docs.wso2.com/display/EI620/JSON+Support


推荐阅读