WSO2 ESB 从 XML(多行)到 JSON(无包装)
WSO2 ESB From XML (multiple lines) to JSON (without wrappers)
我希望能在这里找到帮助...这是特殊情况:
我从端点得到这个 XML:
<Entries>
<Entry>
<Customer>1</Customer>
</Entry>
<Entry>
<Customer>2</Customer>
</Entry>
<Entries>
我可以通过更改 属性 messageType 轻松地将此 XML 转换为 JSON,这将导致:
{"Entries":{"Entry":[{"Customer": 1}, {"Customer": 2}]}}
这是我想要得到的 JSON 结果(没有包装器):
[{"Customer": 1}, {"Customer": 2}]
有知道的人吗?
非常感谢!
我认为您必须首先操纵您的 xml(可能使用 xslt 调解器)以这种方式格式化它
<jsonArray>
<Customer>1</Customer>
<Customer>2</Customer>
</jsonArray>
那么我猜你会得到预期的输出。
例如下面的 xslt 可以完成这项工作
<xsl:stylesheet exclude-result-prefixes="xsl" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" indent="yes" method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/Entries">
<xsl:element name="jsonArray">
<xsl:copy-of select="./Entry/Customer" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
谢谢 Anuruddha 和 Nicolas!
你的回答启发了我,我想分享我所做的。
我创建了这个序列,我将其与序列调解器一起重复使用:
<sequence name="toJSON" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property name="result" scope="default" type="STRING" expression="json-eval($.Entries.Entry)"/>
<payloadFactory media-type="json">
<format></format>
<args>
<arg evaluator="xml" expression="$ctx:result"/>
</args>
</payloadFactory>
</sequence>
它工作得很好,我什至改变了我所有代理的顺序,甚至那些 returns 只有 1 个结果的代理。
非常感谢你的灯!!
我希望能在这里找到帮助...这是特殊情况: 我从端点得到这个 XML:
<Entries>
<Entry>
<Customer>1</Customer>
</Entry>
<Entry>
<Customer>2</Customer>
</Entry>
<Entries>
我可以通过更改 属性 messageType 轻松地将此 XML 转换为 JSON,这将导致:
{"Entries":{"Entry":[{"Customer": 1}, {"Customer": 2}]}}
这是我想要得到的 JSON 结果(没有包装器):
[{"Customer": 1}, {"Customer": 2}]
有知道的人吗?
非常感谢!
我认为您必须首先操纵您的 xml(可能使用 xslt 调解器)以这种方式格式化它
<jsonArray>
<Customer>1</Customer>
<Customer>2</Customer>
</jsonArray>
那么我猜你会得到预期的输出。
例如下面的 xslt 可以完成这项工作
<xsl:stylesheet exclude-result-prefixes="xsl" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" indent="yes" method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/Entries">
<xsl:element name="jsonArray">
<xsl:copy-of select="./Entry/Customer" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
谢谢 Anuruddha 和 Nicolas!
你的回答启发了我,我想分享我所做的。
我创建了这个序列,我将其与序列调解器一起重复使用:
<sequence name="toJSON" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property name="result" scope="default" type="STRING" expression="json-eval($.Entries.Entry)"/>
<payloadFactory media-type="json">
<format></format>
<args>
<arg evaluator="xml" expression="$ctx:result"/>
</args>
</payloadFactory>
</sequence>
它工作得很好,我什至改变了我所有代理的顺序,甚至那些 returns 只有 1 个结果的代理。
非常感谢你的灯!!