在 Java 中将 XML 转换为 JSON 的最快方法

在 Java 中,有哪些好的工具可以快速轻松地将 XML 转换为 JSON?

438863 次浏览

Java 中的 JSON 有一些很好的资源。

专家依赖:

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

XML.java是你要找的类:

import org.json.JSONObject;
import org.json.XML;
import org.json.JSONException;


public class Main {


public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING =
"<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";


public static void main(String[] args) {
try {
JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
System.out.println(je.toString());
}
}
}

产出为:

{"test": {
"attrib": "moretest",
"content": "Turn this to JSON"
}}

我不知道您的确切问题是什么,但是如果您正在接收 XML 并希望返回 JSON (或其他东西) ,您也可以查看 JAX-B。这是将 JavaPOJO 编组/解组为 XML 和/或 Json 的标准。有多个实现 JAX-B 的库,例如 Apache 的 CXF。

Java 中的 JSON的唯一问题是,如果您的 XML 只有一个子级,但是它是一个数组,那么它将把它转换为一个对象而不是一个数组。如果您总是动态地将 XML 转换为 JSON,这可能会导致问题,如果您的示例 XML 只有一个元素,则返回一个对象,但如果它有2 + ,则返回一个数组,这可能会给使用 JSON 的人造成解析问题。

Infoscoop 的 XML2JSON类有一种在进行转换之前对数组元素进行标记的方法,这样即使 XML 中只有一个子元素,数组也可以被正确地映射。

下面是使用它的 一个例子(使用略有不同的语言,但是您也可以从 XML2JSON 链接的 nodelist2json ()方法中看到如何使用数组)。

将 XML 文件转换为 JSON 包括以下依赖项

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

你可以 从 Maven Repository 下载 Jar。 然后按以下方式实施:

String soapmessageString = "<xml>yourStringURLorFILE</xml>";
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString);
System.out.println(soapDatainJsonObject);

我已经上传的项目,你可以直接打开在 Eclipse 和运行 仅此而已 Https://github.com/pareshmutha/xmltojsonconverterusingjava

谢谢你

我发现了一个简单快捷的方法: 使用: 来自 java-json. jar 的 org.json.XML

if (statusCode == 200 && inputStream != null) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();


String inputStr;
while ((inputStr = bufferedReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}


jsonObject = XML.toJSONObject(responseStrBuilder.toString());
}