2014-10-08 33 views

回答

1

除了的DataMapper這是一個企業的功能,你可以使用表達變壓器組件來創建你的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轉換到另一個動態使用表達變壓器: -

<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你需要在任何格式非常容易的方式

+0

謝謝你支持Anirban! – 2015-07-06 02:36:52

0

如果您使用的是企業版的Mule,答案很簡單:使用DataMapper,這正是DataMapper設計的目的,是轉換數據,如果您使用的是社區版,那麼答案真的取決於你需要轉換數據的次數,我首先將json轉化爲java.util.Map,這使得它很容易處理,一旦你將它作爲一個Map,你可以使用MEL exp迴應或編寫一個自定義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>