如何在Mule ESB中将json转换为json文档

如何在Mule ESB中将json转换为json文档,mule,mule-studio,Mule,Mule Studio,我有一个接收json文档的HTTP端点流。这应该转换成其他json文档:“json到json的转换。在mule ESB中,不使用XSLT进行转换的最佳实践是什么 他们可以分享一些例子 感谢您的支持。如果您使用的是Mule的企业版,答案很简单。使用DataMapper。这正是DataMapper的设计目的,转换数据。如果您使用的是community edition,那么答案实际上取决于您需要转换多少数据。我将从转换json开始转换为java.util.Map。这使其易于使用。一旦将其作为映射,则可

我有一个接收json文档的HTTP端点流。这应该转换成其他json文档:“json到json的转换。在mule ESB中,不使用XSLT进行转换的最佳实践是什么

他们可以分享一些例子


感谢您的支持。

如果您使用的是Mule的企业版,答案很简单。使用DataMapper。这正是DataMapper的设计目的,转换数据。如果您使用的是community edition,那么答案实际上取决于您需要转换多少数据。我将从转换json开始转换为java.util.Map。这使其易于使用。一旦将其作为映射,则可以使用MEL表达式或编写自定义java transformer将数据更改为所需的任何格式(仍使用映射)。然后将生成的映射转换回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>

除了作为企业功能的数据映射器之外,您还可以使用表达式转换器组件来创建JSON负载

因此,当您在HTTP之后收到JSON有效负载时,您可以使用JSON到对象转换器(返回类型取决于您的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

表达式转换器非常简单,但千万不要忘记通过对象将其结果转换为JSON转换器,以获得可用的JSON。