【问题标题】:Quickest way to convert XML to JSON in Java [closed]在 Java 中将 XML 转换为 JSON 的最快方法 [关闭]
【发布时间】:2010-12-21 20:24:14
【问题描述】:

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

【问题讨论】:

  • 由于规范中的要求,我不能直接使用 XML,但我同意你的看法。谢谢!
  • @BeachRunnerJoe :我需要写什么导入? import net.sf.json.JSONObject;import org.json.JSONObject;。我还需要包括哪个罐子?
  • 这里有一个链接,可以使用 JAXP 实现无任何依赖关系:stackoverflow.com/questions/27222992/…
  • 我喜欢 SO 的已关闭问题具有如此高的知名度......如果关闭了这样一个有用的问题,某处出了点问题。
  • 我认为 90% 的最有用的问题都是“封闭式主题”..smh

标签: java xml json


【解决方案1】:

JSON in Java 有一些很棒的资源。

Maven 依赖:

<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"
}}

【讨论】:

  • 警告:Android 中不存在 json.org.XML 包!
  • @danieltalsky :我需要写什么导入? import net.sf.json.JSONObject;import org.json.JSONObject;。我还需要包括哪个罐子?
  • 下载所有文件,而不仅仅是 XML.java。从这里:github.com/douglascrockford/JSON-java/downloads
  • 如果你有&lt;test attrib="moretest" content="foo"&gt;bar&lt;/test&gt;怎么办?
  • 注意:org.json 的 XML.toJSONObject() 还可以正确地将 xml 列表转换为 json 数组(不像杰克逊的 XmlMapper,默认情况下会默默吞下)。
【解决方案2】:

要将 XML 文件转换为 JSON,请包含以下依赖项

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

你可以Download Jar from Maven Repository here。 然后实现为:

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

【讨论】:

  • + 用于提供 maven 依赖项
  • 如果您使用的是 java 7,请使用帖子中提到的 json 版本,因为最新版本会引发奇怪的错误。
  • 如果您有 xml sn-p 的有效 dtd 文件,那么您可以使用开源 eclipse 链接 jar 轻松地将 xml 转换为 json 和 json 到 xml。详细的示例 JAVA 项目可以在这里找到:cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
  • 我不得不将整个 JSON 包复制到我的项目并重命名该包。添加到 gradle 会在构建过程中警告来自 Android 的重复包。
【解决方案3】:

JSON in Java 的唯一问题是,如果您的 XML 有一个子项,但它是一个数组,它会将其转换为对象而不是数组。如果您始终从 XML 动态转换为 JSON,这可能会导致问题,如果您的示例 XML 只有一个元素,则返回一个对象,但如果它有 2+,则返回一个数组,这可能会导致使用JSON。

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

这是an example 的使用方法(使用稍微不同的语言,但您也可以从 XML2JSON 链接的 nodelist2json() 方法中看到如何使用数组)。

【讨论】:

  • 我们在 python 中使用“xml-to-json”库,这是一个语义问题。我们为解决这个“数组或对象”问题所做的是编写一个“tryConvertToArray()”方法,该方法返回一个包含单个对象的数组。所以,你总是可以相信你的值是一个数组
  • 我不清楚这如何解决问题。你只是把所有东西都变成一个数组而不是一个对象吗?例如,如果我有 XML &lt;results&gt;&lt;result&gt;&lt;value&gt;1&lt;/value&gt;&lt;/result&gt;&lt;/results&gt;,它会生成 { "results" : { "result" : { "value" : "1" } } } 还是 { "results" : [ { "result" : { "value" : "1" } } ] }
  • 我们期望它是一个数组。当这个数组只有 1 个元素时会出现问题,使其成为 xml-to-json 转换器的对象。因此,由于我们希望这甚至是单个元素的数组,因此我们检查并将其转换为数组,确保我们在期望数组的位置有一个数组。
  • 但是您如何期望特定元素成为数组? XML2JSON 标记元素。目前尚不清楚如何期望它是一个不标记它的数组,否则你永远不会知道单个元素“数组”。
  • 例如,有一个名为“phonenumbers”的元素。 “phonenumbers”元素中有1个或多个“phonenumber”元素。因此,当 "phonenumbers" 中只有一个 "phonenumber" 元素时,xml2json 会创建一个 phonenumber 对象,但我会创建一个 phonenumber 数组并将 phonenumber 对象放入其中。
【解决方案4】:

我发现这是一种快速简便的方法: 使用:org.json.XML 来自 java-json.jar 的类

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());
}

【讨论】:

    【解决方案5】:

    我已经上传了可以直接在eclipse中打开运行的项目 就这样 https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA

    谢谢

    【讨论】:

    【解决方案6】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      相关资源
      最近更新 更多