如何在Mule ESB中转换json-to-json文档

时间:2014-10-08 00:10:18

标签: mule mule-studio

我有一个带有HTTP端点的流,它接收一个json文档。这应该转换成其他json文档:" json-to-json转换。在mule ESB中,这是不使用XSLT的最佳实践吗?

他们可以分享一些例子。

感谢您的支持。

2 个答案:

答案 0 :(得分:3)

Datamapper (企业版功能)外,您可以使用 Expression transformer 组件来创建JSON有效内容。

因此,当您在HTTP之后收到JSON有效负载时,使用json-to-object-transformer解析JSON(返回类型取决于您的JSON),将元素的值存储在变量中,最后使用表达变换器来创建动态JSON ..

让我们考虑一个非常简单的例子,让你的JSON成为

{
    "name": "Julio Cejas",
    "id": 37
}

现在,您希望转换为以下JSON添加额外元素

{
    "name": "Julio Cejas",
    "id": 37,
    "designation": "Director"
}

因此,您可以使用以下流程中的表达式转换器动态地从一个JSON转换为另一个JSON: -

<flow name="DynamicJSONFlow1" doc:name="DynamicJSONFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8085" path="test" doc:name="HTTP"/>
         <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
         <set-variable variableName="name" value="#[message.payload.name]" doc:name="Variable"/>
         <set-variable variableName="id" value="#[message.payload.id]" doc:name="Variable"/>

         <expression-transformer
     expression="#[[ 
                    'name':flowVars.name,
                    'id':flowVars.id,
                    'designation':'Designation'
                   ]
      ]" doc:name="Expression"/>

         <json:object-to-json-transformer doc:name="Object to JSON"/>     
         <logger level="INFO" message="#[message.payload]" doc:name="Logger"/>
    </flow>

您可以根据需要修改此流程,并且可以非常简单的方式以任何格式生成所需的JSON

答案 1 :(得分:0)

如果您使用的是Mule的企业版,答案很简单。使用DataMapper。这正是DataMapper的目的,即转换数据。如果您使用社区版,那么答案实际上取决于您需要多少转换数据。我首先将json转换为java.util.Map。这使得它易于使用。将它作为Map后,您可以使用MEL表达式或编写自定义java转换器将数据更改为您需要的任何格式(仍然使用Map)。然后将生成的Map转换回Json是微不足道的。

<flow name="jsonToJson">
     <vm:inbound-endpoint exchange-pattern="request-response" path="jsonToJson" doc:name="VM"/>
     <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
     <custom-transformer class="com.example.myMapToMapDataTransformer" doc:name="Java"/>
     <json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>