2014-07-14 108 views
1

我有以下流程:騾子ESB:轉換JSON對象到另一個對象

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.5.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd"> 
    <db:generic-config name="Generic_Database_Configuration" url="jdbc:db2://localhost:50000/TEST:user=instuid;password=instpw;" driverClassName="com.ibm.db2.jcc.DB2Driver" doc:name="Generic Database Configuration"/> 
    <flow name="test2Flow1" doc:name="test2Flow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/> 
     <db:select config-ref="Generic_Database_Configuration" doc:name="Database" doc:description="test"> 
      <db:parameterized-query><![CDATA[SELECT SUM(BAL) FROM xxxx.ACCT]]></db:parameterized-query> 
     </db:select> 
     <json:object-to-json-transformer doc:name="Object to JSON"/> 
    </flow> 
</mule> 

流動的話很好,因爲你可以看到JSON對象轉換數據庫對象爲以下內容: (A JSON與一個單一的對象):

[{"1":444}] 

請注意,444是一個數值(它沒有引號周圍)。

我想做

  • 沒有陣列創建一個簡單的JSON結構從數值

  • 更改444爲一個字符串值什麼

  • 讓它看起來像:(將444放入另一個結構中)

    {「Total」:「444」,「Date」:「14/07/14」}

我知道,要得到系統日期,我執行以下操作:

#[server.dateTime.format('dd/MM/yy')] 

...我知道從原始字符串值444,我執行以下操作:

$..1 

但我不知道下一步該怎麼做。

現在我使用JSON對象來查看數據庫連接器的結果,下一步我要做什麼對象來創建我的新結構。

我是否使用另一個JSON對象,如何構造表達式?

回答

2

爲了寫出所有的數字爲字符串,你可以把它放在傑克遜對象映射器和參考,從您的變壓器自定義對象映射:

 <spring:beans> 
     <spring:bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> 

     <spring:bean 
      class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
      <spring:property name="targetObject" ref="jacksonObjectMapper" /> 
      <spring:property name="targetMethod" value="configure" /> 
      <spring:property name="arguments"> 
       <spring:list> 
        <spring:value>WRITE_NUMBERS_AS_STRINGS</spring:value> 
        <spring:value>true</spring:value> 
       </spring:list> 
      </spring:property> 
     </spring:bean> 
    </spring:beans> 


    <flow name="flow1" doc:name="flow1"> 
     ... 
     <json:object-to-json-transformer mapper-ref="jacksonObjectMapper" /> 
     ... 
    </flow> 

然而,這將是點對所有數字字段。您可能必須爲特定行爲編寫自定義序列化程序。

至於展開數組。不知道你可以通過與傑克遜版本mule使用的對象映射器來做到這一點。但是,對於這種情況下,如果你總是剛開一個結果從查詢回來 - 你可能只是JSON變壓器

<set-payload value="#[payload[0]]"> 
<json:object-to-json-transformer mapper-ref="jacksonObjectMapper" /> 
0

做的一個簡單的方法是用騾子的Expression Transformer之前展開陣列。
您需要從您的JSON數組提取值,並將其存儲到一些變量,如下列: -

<json:json-to-object-transformer returnClass="java.util.List" doc:name="JSON to Object" /> 
<set-variable variableName="Total" value="#[message.payload[0].1]" doc:name="Variable" /> 

現在,你的變量將包含值444

下一步是您日期存儲到其他一些變量,如下所示: -

<set-variable variableName="Date" value="#[server.dateTime.format('dd/MM/yy')]" doc:name="Variable" /> 

現在,如果這兩個步驟都做了,那麼y您可以同時使用Expression Transformer一個非常簡單的方法創建你需要JSON如下: -

<expression-transformer 
      expression="#[[ 
       'Total': flowVars['Total'].toString(), 
       'Date': flowVars['Date'] 
         ]]" doc:name="Expression" /> 
<json:object-to-json-transformer doc:name="Object to JSON" /> 

這將產生和構造您需要的JSON: - {"Date":"12/08/15","Total":"444"}在一個非常簡單的方式