【问题标题】:Parsing JSON url in Java [closed]在 Java 中解析 JSON url [关闭]
【发布时间】:2014-02-25 05:26:50
【问题描述】:

我正在尝试使用 GSON 将一些 JSON 数据解析为 Java,但由于它的格式化方式,我无法这样做。我环顾四周,但我找到的信息都没有帮助我解决这个问题。我对 JSON 没有太多经验,尤其是在将其解析为 Java 时。我将不胜感激为此获得的任何帮助。

JSON 网址: http://xpaw.ru/mcstatus/status.json

编辑:

我听取了您关于使用 Jackson 的建议并浏览了一些指南并尝试制作它,这是我的代码:

主类:http://pastebin.com/XRcpkAuP

UptimeCheck 类:pastebin/f2UanvhY(抱歉,我不能发布超过 2 个链接:/)

由于某种原因,它似乎无法解析链接。有人可以帮我吗? 谢谢你

【问题讨论】:

  • “由于它的格式化方式”是什么意思?最终,为什么会失败?
  • 你能分享一下男女同校的问题吗
  • jsonlint.com 表明它是有效的 json。
  • 请不要在 pastebin 中“隐藏”内容。将其直接包含在您的问题中。

标签: java json parsing gson jsonobject


【解决方案1】:

我个人建议使用 Jackson 将 JSON 转换为 Java。 Jackson 是一个高性能 JSON 处理器 Java 库。

下面的 sn-ps 会给这个库一个基本的想法。

//1. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("c:\\report_data.json"), ReportData.class);

//2. Convert Java object to JSON format
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\report_data.json"), reportData);

writeValue() 和 readValue() 都有许多重载方法来支持不同类型的 InputStream 和 OutputStream。

供您参考的示例:http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

希希尔

【讨论】:

    【解决方案2】:

    我不知道 gson,但你的 JSON 字符串是有效的。您可以使用以下内容:

    这是执行此操作的简单代码,我避免了所有检查,但这是主要思想。

     public String parse(String jsonLine) {
        JsonElement jelement = new JsonParser().parse(jsonLine);
        JsonObject  jobject = jelement.getAsJsonObject();
        jobject = jobject.getAsJsonObject("data");
        JsonArray jarray = jobject.getAsJsonArray("translations");
        jobject = jarray.get(0).getAsJsonObject();
        String result = jobject.get("translatedText").toString();
        return result;
    }
    

    为了使使用更通用 - 你会发现这里的 [javadoc][1] 非常清晰和有用。

    【讨论】:

      【解决方案3】:

      我在另一篇文章中读到过.. 使用 GSON 似乎很好....

      最简单的事情通常是创建匹配的对象层次结构,如下所示:

      这是一个例子

      public class Wrapper {
         public Data data;
      }
      static class Data {
         public Translation[] translations;
      }
      static class Translation {
         public String translatedText;
      }
      

      然后使用 GSON 绑定,通过字段遍历对象层次结构。添加 getter 和 setter 对基本数据容器毫无意义。

      比如:

      Wrapper value = GSON.fromJSON(jsonString, Wrapper.class);
      String text = value.data.translations[0].translatedText;
      

      【讨论】:

      • 你确实意识到 Stackoverflow 不是一个有对话线程的论坛;当您可以使用更新的信息简单地编辑原始答案时,几乎没有理由发布全新的答案(仅比上一个答案晚一分钟)。
      • @PaulRichter 一个问题不一定只有一个答案。如果我的两个答案都相似,我可以编辑,但这里 1 使用 GSON,另一个没有 GSON。所以我认为我不应该编辑,然后为什么堆栈溢出会导致用户为一个问题发布超过 1 个答案?
      • 现在这是一个有争议的问题,因为我看到你删除了另一个答案。主要问题是两个答案都非常笼统。虽然它们没有“错误”(并且您试图提供帮助),但就 OP 问题而言,它们也不是“正确”的,因为我们根本没有足够的信息来给出具体而简洁的答案。最终,避免双重答案本身,除非两个帖子明显不同,即使那样,也不鼓励这样做,因为通常这种情况很好地表明问题本身可能过于笼统(并且可能需要关闭)。
      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多