2015-02-24 209 views
1

我有這樣的JSON字符串: -如何將JSON字符串轉換爲具有屬性的xml?

{ 
"mkt": { 
"-st": "NSW", 
"-pc": "2150", 
"-lo": "PARRAMATTA", 
"-pt": "U", 
"-notify_by": "email", 
"-notify_when": "any", 
"stat": [ 
    { 
    "-code": "DSR_PLUS", 
    "-change": "falls below", 
    "-val": "50" 
    }, 
    { 
    "-code": "TV", 
    "-change": "rises above", 
    "-val": "450000" 
    } 
] 
} 
} 

我打算將它轉換爲XML這樣的: -

<?xml version="1.0" encoding="UTF-8" ?> 
<mkt st="NSW" pc="2150" lo="PARRAMATTA" pt="U" notify_by="email" notify_when="any"> 
    <stat code="DSR_PLUS" change="falls below" val="50" /> 
    <stat code="TV" change="rises above" val="450000" /> 
</mkt> 

我使用此代碼JSON字符串轉換爲XML: -

JSONObject o = new JSONObject(JSONSTring); 
String xml = org.json.XML.toString(o); 

但這是給我錯XMl(XML沒有屬性)

回答

1

如果您想使用org.json類(如JSONObject和XML),請注意JSON和XML之間沒有自然映射。不要使用XML類,而是嘗試來自同一個庫的JSONML類,這就是它的用途。請注意,您必須修改JSON文本才能被JSONML解析。你可以找到的BNF JSONML此頁上:http://jsonml.org

String jsonXmlStr = 
     "{"+ 
      "\"st\": \"NSW\","+ 
      "\"notify_by\": \"email\","+ 
      "\"notify_when\": \"any\","+ 
      "\"pc\": 2150,"+ 
      "\"lo\": \"PARRAMATTA\","+ 
      "\"pt\": \"U\","+ 
      "\"childNodes\": ["+ 
       "{"+ 
       "\"val\": 50,"+ 
       "\"code\": \"DSR_PLUS\","+ 
       "\"change\": \"falls below\","+ 
       "\"tagName\": \"stat\""+ 
       "},"+ 
       "{"+ 
       "\"val\": 450000,"+ 
       "\"code\": \"TV\","+ 
       "\"change\": \"rises above\","+ 
       "\"tagName\": \"stat\""+ 
       "}"+ 
      "],"+ 
      "\"tagName\": \"mkt\""+ 
      "}"; 

    JSONObject jsonXmlObject = new JSONObject(jsonXmlStr); 
    System.out.println(JSONML.toString(jsonXmlObject)); 

以上JSON文本和代碼片段將生成所需的XML:

<mkt st="NSW" notify_by="email" notify_when="any" pc="2150" lo="PARRAMATTA" pt="U"> 
    <stat val="50" code="DSR_PLUS" change="falls below"/> 
    <stat val="450000" code="TV" change="rises above"/> 
</mkt> 
1

你可以我們e(將屬性標籤更改爲「@」而不是「 - 」。 (這是一個時髦的腳本,但它幾乎與Java相同)

import net.sf.json.JSON 
import net.sf.json.JSONSerializer 
import net.sf.json.xml.XMLSerializer 

JSON json = JSONSerializer.toJSON(jsonString) 
XMLSerializer xmlSerializer = new XMLSerializer() 
xmlSerializer.setTypeHintsCompatibility(false) 
def xml = xmlSerializer.write(json) 

小心!你可能有問題與你的JSON如果它有複雜的數組,事實上..這就是我正在尋找一種方法來將JSON轉換爲具有屬性的XML。

<mkt lo="PARRAMATTA" notify_by="email" notify_when="any" pc="2150" pt="U" st="NSW"> 
     <stat> 
      <e change="falls below" code="DSR_PLUS" val="50"/> 
      <e change="rises above" code="TV" val="450000"/> 
     </stat> 
     </mkt> 

如果這對你有用,那麼完美否則..我們將不得不等待有人給我們另一種解決方案。