【问题标题】:xml to json conversion in wso2wso2中的xml到json转换
【发布时间】:2015-10-31 13:31:12
【问题描述】:

当我尝试在 wso2 中使用 XSLT 中介将 XML 转换为 Json 时,我收到“无法将有效负载写为 JSON”。错误。谁能帮我解决这个问题。

提前致谢

【问题讨论】:

  • 如果您能提供更多信息,即您所做的配置会更好
  • @Rajeev 这是我完成的配置

标签: json xml xslt wso2 wso2esb


【解决方案1】:

为什么不使用有效载荷工厂?这是将 xml 转换为 Json 的最佳方式。

例如:

<payloadFactory media-type="json">
    <format>{ "error": "0", "message": "$1", "data": $2 }</format>
        <args>
            <arg evaluator="json" expression="$.USER.description"/>
            <arg evaluator="json" expression="$.USER"/>
        </args>
</payloadFactory>
<property name="ContentType" value="application/json" scope="axis2"/>

或使用此属性发送消息:

<property name="messageType" value="application/json" scope="axis2"/>

media-type 属性指定消息的格式是 XML 还是 JSON。 在这个例子中,我使用 JSON 来转换这个 xml:

<USER>
    <description>some Notes</description>
    <others></others>
</USER>

以及 ESB 结果:

{
    "error" : "0",
    "message" : "Some notes",
    "data"  : {
        "description" : "Some notes",
        "others" : ""
    }
}

有关有效载荷工厂的更多信息,请参阅此链接: https://docs.wso2.com/display/ESB490/PayloadFactory+Mediator

更新:

您必须使用开关盒或过滤器中介。 例如,这是一个开关案例示例。你必须完成正则表达式:

 <switch source="//body">
        <case regex="">
           <payloadFactory media-type="json">

           </payloadFactory>
        </case>
 </switch>

或者你可以使用过滤器。在此示例中,过滤器匹配您给定的正则表达式或 XPath。如果此评估返回 true,它将发送 true json。如果评估返回 false,则返回空 json。

<filter (source="[XPath|json-eval(JSONPath)]" regex="string") | xpath="[XPath|json-eval(JSONPath)]">
    <then>
        <payloadFactory media-type="json">
            <format>{josn:"body"}</format>
            <args>your args<args/>
        </payloadFactory>
    </then>
    <else>
        <payloadFactory media-type="json">
            <format>{}</format>
            <args/>
        </payloadFactory>
    </else>
</filter>

此链接应该可以帮助您: https://docs.wso2.com/display/ESB490/Filter+Mediator

【讨论】:

  • 我也试过这个,但是有一个问题,当我的 没有任何值时,我不应该将它添加到我的 中,所以我已经使用了xslt。它应该是这样的:如果 arg0 != "" 那么 json 将是,{"somekey":"arg0"} 否则我的 json 将是 {}
  • 感谢您的回复。这会很有帮助,如果我只有一个 ,如果我们有多个 怎么办?我们需要使用多个过滤器吗?相反,我们可以使用 xslt。
  • 您必须在 JsonObject 上使用 switch case 并使用正则表达式定义您的规则。这是可能的。我尝试了所有关于转换和转换消息的解决方案,而有效负载工厂对我来说是最好的。试试这个解决方案,告诉我你的经验。
  • 感谢您的回答。目前我只使用有效载荷工厂。但它并不完全适合我的用例(基于 值需要 我的 json),这就是我尝试使用 xslt 的原因。使用有效载荷工厂是不可能的。
【解决方案2】:

如果您尝试将soap服务转换为rest,您可以通过将消息类型指定为(在rest api中)来实现:

 <property name="messageType" value="application/json" scope="axis2"/>

【讨论】:

  • 我已经尝试过了。但这没有帮助。我的配置是这样的: .
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多