json - 如何遍历 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>
解决方案
从 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
推荐阅读
- reactjs - 根据 react-hook-form 中的兄弟状态重置选择值
- list - 我想将飞镖列表添加到另一个列表
- tensorflow - 如何修复错误:无法注册 2 个具有相同名称的指标:/tensorflow/api/keras/optimizers
- android - 您好我想在我的应用上展示插页式广告,但出现错误?
- javascript - HTML 中的正则表达式
- sql - 如何首先将输入插入到 sql 表代码中
- javascript - JS 代码在 Google Tag Manager 中生成错误
- javascript - 填充猫鼬查询时展平多个字段
- python - Can't decompress with GZIP: Traceback error
- django - Django Datetime function