gpt4 book ai didi

java - Xml 到 Json 到 xml 可逆转换 json-lib

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:57 31 4
gpt4 key购买 nike

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

A structured XML element can be converted to a reversible JSON structure, if

  • all subelement names occur exactly once, or
  • subelements with identical names are in sequence.

我尝试了以下代码片段:

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 文档确实满足上述子元素的两个条件。

最佳答案

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

关于java - Xml 到 Json 到 xml 可逆转换 json-lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806254/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com