【问题标题】:how can I loop over json payload received by wso2 esb proxy-service如何遍历 wso2 esb proxy-service 接收到的 json 有效负载
【发布时间】:2018-05-20 09:25:00
【问题描述】:

我正在使用 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>

【问题讨论】:

  • 要从 json 转换为 xml,只需将这个 放在 outsequence 发送之前
  • @JorgeInfanteOsorio 这就是我目前正在做的事情。如果我想改变 outSequence 怎么办?
  • 在这种情况下,您可以使用 XSLT 中介从 json 转换为 xml。 sanjeewamalalgoda.blogspot.com/2013/10/…

标签: json wso2 wso2esb mediator proxy-server


【解决方案1】:

从 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

【讨论】:

    【解决方案2】:

    您可以使用有效负载调解器从 JSON 构造 xml。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2021-02-26
      相关资源
      最近更新 更多