如何将JSON字符串转换为具有属性的xml?

问题描述:

我有这样的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没有属性)

如果您想使用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> 

你可以我们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> 

如果这对你有用,那么完美否则..我们将不得不等待有人给我们另一种解决方案。