我有一个带有HTTP端点的流,它接收一个json文档。这应该转换成其他json文档:" json-to-json转换。在mule ESB中,这是不使用XSLT的最佳实践吗?
他们可以分享一些例子。
感谢您的支持。
答案 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>