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

问题描述 投票:1回答:2

我有这个json字符串: -

{
"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)

java xml json
2个回答
1
投票

如果你想使用像JSONObject和XML这样的org.json类,那么请注意JSON和XML之间没有自然映射。而不是使用XML类,尝试来自同一个库的JSONML类,就是它的用途。请注意如何修改JSON文本以便JSONML可以解析。你可以在这个页面找到BNF for 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
投票

您可以使用(更改“@”的属性标记而不是“ - ”。(这是一个groovy脚本,但它与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> 

如果这对你有效,那么我们将不得不等待某人给我们另一种解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.