我正在尝试使用json-lib进行可逆的xml-json-xml泛型转换,根据其文档进行转换,如Converting Between Xml And Json中所述。根据该文件:
结构化XML元素可以转换为可逆JSON 结构,如果
- 所有子元素名称只出现一次,或
- 具有相同名称的子元素按顺序排列。
我尝试了以下代码段:
String xml ="<z><y>dfsdfs</y><y>sdf</y><x>afdf</x></z>";
System.out.println("Original Xml: " + xml);
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setForceTopLevelObject(true);
xmlSerializer.setTypeHintsEnabled(false);
JSON json = xmlSerializer.read( xml );
String jsonString = json.toString(2);
System.out.println("Converted Json: " + jsonString);
JSON json2 = JSONSerializer.toJSON( jsonString );
String xml2 = xmlSerializer.write( json2 );
System.out.println("Converted Xml:" + xml2);
请注意,示例xml确实遵循这些条件。但结果是:
Original Xml: <z><y>dfsdfs</y><y>sdf</y><x>afdf</x></z>
Converted Json: {"z": {
"y": [
"dfsdfs",
"sdf"
],
"x": "afdf"
}}
Converted Xml:<?xml version="1.0" encoding="UTF-8"?>
<o><z><x>afdf</x><y><e>dfsdfs</e><e>sdf</e></y></z></o>
请注意
json-lib是否缺少任何设置来防止这两个问题?
我注意到javascript库https://code.google.com/p/x2js/似乎运行良好(虽然其他问题),但我正在寻找一个已经在java中可用的。我想要一个保留xml结构和元素顺序的方法。我的XML文档确实满足了上面关于子元素的两个条件。
答案 0 :(得分:0)
不确定它现在仍然有用,但我可以通过使用另一个库来实现:http://www.json.org/
import org.json.JSONObject;
import org.json.XML;
String xmlString = "<z><y>dfsdfs</y><y>sdf</y><x>afdf</x></z>";
System.out.println("Initial XML : " + xmlString);
JSONObject jsonObj = (XML.toJSONObject(xmlString));
System.out.println("Converted JSON : " + jsonObj.toString());
System.out.println("Back to converted XML : " + XML.toString(jsonObj));
如果你正在使用maven,你会在你的pom中需要这个:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>