我正在使用 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时,我几乎总是使用这种方式。
首先将消息类型设置为 xml,您也可以将内容类型设置为,但我不是 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 和从 XML 转换 https://docs.wso2.com/display/EI620/JSON+Support
在输出序列中,您可以使用有效负载中介器从 JSON 构造 xml。
https://docs.wso2.com/display/ESB500/PayloadFactory+Mediator