2016-02-26 137 views
2

我正在使用WSO2 ESB並試圖將我的XML負載轉換爲Json。如何將單個子元素xml元素轉換爲Json數組

<property name="messageType" value="application/json" scope="axis2"/> 

上述屬性介體將我的xml轉換爲json,並且一切正常。

問題在於我的XML有效載荷中的子節點。

當XML是

<users> 
    <user>user1</user> 
    <user>user2</user> 
</users> 

它被轉化爲

"users": { 
    "user": [ 
     "user1", "user2" 
    ] 
} 

所以我休息充分端點recieving這是期待一個列表「用戶」的JSON有效載荷工作正常。

但是當XML是

<users> 
    <user>user1</user> 
</users> 

轉換後的JSON看起來像這樣,

"users": { 
    "user": "user1" 
} 

因此,這是預期的「用戶」列表中的問題的REST端點沒有得到一個列表,而一字符串被髮送並且數據類型不匹配導致找不到端點。

如果進一步的嘗試,

<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://james.newtonking.com/projects/json"> 
    <users> 
     <user json:Array="true">user1</user> 
    </users> 
</Data> 

這個轉換提供了一個JSON作爲,

{ 
    "Data": { 
    "users": { 
     "user": { 
     "@Array": "true", 
     "$": "user1" 
     } 
    } 
    } 
} 

我需要的是,

{ 
    "Data": { 
    "users": { 
     "user": { 
     [ 
     "user1" 
     ] 
     } 
    } 
    } 
} 

周杰倫的建議後,

謝謝Jay,

經過您的輸入,我嘗試了一些東西,但我被卡住了一些點。這就是我想,

mc.setPayloadJSON(
      { 
       "someIds" : { 
        "someIdList" : (vUIdLen &gt; 1 ? mc.getProperty("someIdList") : "["+someIdList+"]") 
       } 
      });</script> 

我檢查子節點的lenth,如果是大於1比我現在用的是之前捕獲價值爲節點,它是[「ABC」,「焊接工藝評定「],如果它小於或等於1,那麼我將使用單個json值並在」[「+ someIdList +」]「中構造它,但其中任何一個都不會被追加。它會給出錯誤,如「腳本引擎返回執行內聯js腳本函數調解的錯誤」。

如何正確追加此項。

(vUIdLen &gt; 1 ? mc.getProperty("someIdList") : "["+someIdList+"]") 

mc.getProperty的值( 「someIdList」)以上是[ 「ABC」, 「PQR」]和someIdList的值在 「[」 + someIdList + 「]」 來爲abc。

請建議。

回答

2

有不使用腳本中介這另一種解決方案,您可以添加

<?xml-multiple?> 

處理指令的有效載荷。如下;

<users> 
    <?xml-multiple?> 
    <user>user1</user> 
</users> 

這將爲用戶創建json數組。

{"users": {"user": ["user1"]}} 

希望這會有所幫助。

+0

老兄,你真了不起。上帝祝福你。 – ViS

相關問題