我有此xml,需要进行处理并将其转换为JSON:
<jsonObject>
<number>1234</number>
<emptyString/>
<string>hello</string>
</jsonObject>
当它像这样通过JsonStreamBuilder运行时:
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
我得到这样的JSON:
{
"number":1234,
"emptyString": null,
"string":"hello"
}
所以我想知道有什么方法可以配置JsonStreamBuilder将空标记不是空值,而是空字符串,此外,我还希望数字也被当作字符串。
也许我可以修改默认XML以适应我的需求?
顺便说一句,我正在使用WSO2 EI 6.1.1
答案 0 :(得分:1)
JsonFormatter的默认行为是允许JSON输出中的原始类型。这意味着任何有效数字的内容都将在JSON消息中表示为数字。
作为此问题的解决方案,您可以在将以下属性添加到 EI_HOME / conf 目录的 synapse.properties 文件中之后,禁止将其转换为原始类型。< / p>
synapse.commons.json.output.autoPrimitive=false
但是,此属性是全局属性,因此它将影响所有服务(代理服务和API)。因此,这意味着任何有效数字的字符串都不会转换为数字。
根据您的问题,您需要禁用将String转换为Integer的功能。您可以解决此问题,也可以在 EI_HOME / conf / synapse.properties 文件中添加以下属性。
synapse.commons.json.output.autoPrimitive=true
synapse.commons.json.output.disableAutoPrimitive.regex=^[1-9]*$
在这种情况下,自动原语仅对数字禁用。
注意:启用自动基本功能后,可以根据synapse.properties文件中定义的正则表达式从自动基本功能中排除某些字段。
答案 1 :(得分:0)
这看起来像wso itlsef中的限制,文档指出这是所需的行为。 要克服问题,请尝试使用脚本调解器 WSO2ESB: Property setting not accepting empty value 甚至变得更低(更复杂) https://medium.com/@lashan/class-mediator-to-handle-null-values-in-json-payload-wso2-ei-34a43246f0f
答案 2 :(得分:0)
如果您使用的是更新的 WSO 版本,则有一个解决方案:https://docs.wso2.com/display/EI630/Working+with+Message+Payloads#WorkingwithMessagePayloads-EmptyXMLelementswiththe'nil'attribute
您可以借助 JSON Transform mediator
在本地设置突触配置