【问题标题】:Xml to Json to xml reversible conversion json-libxml到json到xml的可逆转换json-lib
【发布时间】:2013-12-27 18:58:47
【问题描述】:

我正在尝试使用 json-lib 进行可逆的 xml-json-xml 通用转换,根据其文档进行转换,如Converting Between Xml And Json 中所述。根据文件:

结构化的 XML 元素可以转换为可逆的 JSON 结构,如果

  • 所有子元素名称只出现一次,或者
  • 具有相同名称的子元素按顺序排列。

我尝试了以下代码sn-p:

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>

注意

  • 元素顺序已更改。它似乎在序列化 xml 时对子元素进行排序。
  • 我们插入了一些额外的 o 和 e 元素

json-lib 是否缺少任何设置来防止这两个问题?

我确实注意到一个 JavaScript 库 https://code.google.com/p/x2js/ 似乎运行良好(尽管存在其他问题),但我正在寻找一个已经在 java 中可用的库。我想要一个保留xml结构和元素顺序的东西。我的 XML 文档在子元素上确实满足上述两个条件。

【问题讨论】:

  • 我使用 Gson 完成了类似的操作来读取/写入 JSON 并使用 SAX 处理 XML。这当然是一个两步转换,因为您总是从 Java 传递,但在我的情况下,它适用于每种情况。您只需要注意处理 Java 代码中潜在的不一致。

标签: java xml json json-lib


【解决方案1】:

不确定它现在是否仍然有帮助,但我可以通过使用另一个库来做到这一点:来自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>

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2010-12-04
    相关资源
    最近更新 更多