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

Java 如何将JSON字符串转换为具有属性的xml?,java,xml,json,Java,Xml,Json,我有一个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",

我有一个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>
但是这给了我错误的XMl(没有属性的XMl)

您可以使用(将属性标记改为“@”而不是“-”(这是一个groovy脚本,但与Java中的几乎相同)

注意!事实上,如果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> 


如果这对您很有用,我们将不得不等待其他人给我们另一个解决方案。

如果您想使用org.json类,如JSONObject和XML,那么请注意json和XML之间没有自然映射。与其使用XML类,不如尝试使用同一库中的JSONML类,这就是它的用途。注意如何修改JSON文本以供JSONML解析。您可以在此页面上找到JSONML的BNF:

上述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>

下划线java库可以将json转换为xml.import com.github.underline.lodash.U;字符串xml=U.jsonToXml(jsonstring);
<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> 
    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));
<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>