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