Java Xml到Json到Xml可逆转换Json库

Java Xml到Json到Xml可逆转换Json库,java,xml,json,json-lib,Java,Xml,Json,Json Lib,我正在尝试使用json lib进行可逆xml json xml通用转换,根据其文档,json lib将按照中所述进行转换。根据该文件: 结构化XML元素可以转换为可逆JSON 结构,如果 所有子元素名称只出现一次,或 具有相同名称的子元素按顺序排列 我尝试了以下代码段: String xml ="<z><y>dfsdfs</y><y>sdf</y><x>afdf</x></z>"; System.

我正在尝试使用json lib进行可逆xml json xml通用转换,根据其文档,json lib将按照中所述进行转换。根据该文件:

结构化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);  
String xml=“dfssdfafdfdff”;
System.out.println(“原始Xml:+Xml”);
XMLSerializer XMLSerializer=新的XMLSerializer();
setForceTopLevelObject(true);
xmlSerializer.SetTypeHintEnabled(false);
JSON=xmlSerializer.read(xml);
字符串jsonString=json.toString(2);
System.out.println(“转换的Json:+jsonString”);
JSON json2=JSONSerializer.toJSON(jsonString);
字符串xml2=xmlSerializer.write(json2);
System.out.println(“转换的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>
原始Xml:dfssdfafdfdff 转换的Json:{“z”:{ “y”:[ “dfsdfs”, “自卫队” ], “x”:“afdf” }} 已转换的Xml: AFDFSDF 注意

  • 元素顺序已更改。它似乎在序列化xml时对子元素进行排序
  • 我们插入了一些额外的o和e元素
我在json库中是否缺少任何设置来防止这两个问题


我确实注意到javascript库似乎工作得很好(尽管还有其他问题),但我正在寻找一个已经在java中可用的库。我想要一个保留xml结构和元素顺序的。我的XML文档确实满足上面关于子元素的两个条件。

现在不确定它是否仍然有用,但我可以通过使用另一个库来做到这一点:来自

import org.json.JSONObject;
导入org.json.XML;
String xmlString=“DFSSDFAFDFDFF”;
System.out.println(“初始XML:+xmlString”);
JSONObject jsonObj=(XML.toJSONObject(xmlString));
System.out.println(“转换的JSON:+jsonObj.toString());
System.out.println(“返回到转换后的XML:+XML.toString(jsonObj));
如果您使用的是maven,则pom中需要:

<dependency>
   <groupId>org.json</groupId>
   <artifactId>json</artifactId>
   <version>20140107</version>
</dependency>

org.json
json
20140107

我用Gson读/写JSON和用SAX处理XML做了类似的事情。当然,这是一个两步转换,因为您总是从Java传递,但在我的例子中,它适用于所有场景。您只需要注意处理Java代码中潜在的不一致性。
<dependency>
   <groupId>org.json</groupId>
   <artifactId>json</artifactId>
   <version>20140107</version>
</dependency>