【问题标题】:How to get JSON data from an url in Java?如何从 Java 中的 url 获取 JSON 数据?
【发布时间】:2012-04-17 04:34:15
【问题描述】:

我查看了很多页面,但大多数教程和脚本都返回带有这种 JSON 输出类型的错误代码。那么我怎样才能在 Java 中从这个 JSON 中提取数据呢?:

[
  {
    "user":{"id":"1","username":"user1"},
    "item_name":"item1",
    "custom_field":"custom1"
  },
  {
    "user":{"id":"2","username":"user2"},
    "item_name":"item2",
    "custom_field":"custom2"
  },
  {
    "user":{"id":"3","username":"user3"},
    "item_name":"item3",
    "custom_field":"custom3"
  }
]

【问题讨论】:

  • 您是否已经从 URL 下载了数据并想知道如何阅读?或者您想知道如何首先下载它?
  • 许多库希望将整个 JSON 内容包装在 { } 中,因此您可以尝试将 JSON 数据包装在花括号中。我通常使用 json-lib 来阅读它JSONObject.fromObject( yourJsonString );
  • @luukes,不正确,您也可以创建 JSONArray。这并不一定意味着您总是必须为JSONArray 创建一个JSONObject 包装器。
  • 我还没有下载 json,但我已经有一个工作脚本可以将 json 转换为字符串。我只需要转换就可以在java中得到它。

标签: java json url extract


【解决方案1】:

如果你想使用 Gson,那么首先你声明类来保存每个元素和子元素:

public class MyUser {
  public String id;
  public String username;
}

public class MyElement {
  public MyUser user;
  public String item_name;
  public String custom_field;
}

然后你声明一个最外层元素的数组(因为在你的情况下 JSON 对象是一个 JSON 数组),并分配它:

MyElement[] data = gson.fromJson (myJSONString, MyElement[].class);

然后您只需访问data 的元素。

要记住的重要一点是,您声明的属性的名称和类型应与 JSON 字符串中的名称和类型相匹配。例如“id”、“item_name”等

【讨论】:

  • 我尝试使用它,但仍然出现错误,这是我所拥有的 pastebin 链接:pastebin.com/nRiGqq9r 如果我使用 'MyElement[] data = new Gson().fromJson (jsonText, MyElement.class);'它会告诉我我需要将 MyElement[] 更改为 MyElement,所以这也不起作用,我怎样才能使这个脚本工作?
  • @Aronnn - 在 fromJson 调用中,您分配的类型应该是 MyElement[].class,而不是 MyElement.class
  • 这是我遇到的错误的脚本,我真的无法弄清楚问题是什么:pastebin.com/iR7ysMx6
  • 您有多个问题。您正在阅读的 JSON 很糟糕。在某处有一个. 而不是,。仔细看。其次,您不能将MyElementMyUser 声明为嵌套类。如果 Gson 看不到这些类的构造函数,它如何访问它们?
  • 在发现问题,寻求帮助的时候,建议你考虑做一个符合sscce.org的例子;例如,如果您将下载 JSON 与解析 JSON 分开,并改用一个简短、正确、硬编码的字符串,您会发现 HTTP URL 生成了错误的 JSON。
【解决方案2】:

你可以试试 JSON Simple
http://code.google.com/p/json-simple/

例子:

JSONParser jsonParser = new JSONParser();
JSONArray jsonArray = (JSONArray) jsonParser.parse(jsonDataString);

for (int i = 0; i < jsonArray.size(); i++) {
    JSONObject obj = (JSONObject) jsonArray.get(i);
    //Access data with obj.get("item_name")
}

请小心检查空值/小心转换等。

【讨论】:

    【解决方案3】:

    如果您尝试在 Java 中序列化/反序列化 json,我建议您使用 Jackson。 http://jackson.codehaus.org/

    下载 Jackson 后,您可以将 json 字符串反序列化为与 JSON 中的对象匹配的对象。

    Jackson 提供了可以附加到您的类的注释,这使得反序列化非常简单。

    【讨论】:

    • 我怎样才能用杰克逊从这个 JSON 中获取数据?
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2018-09-22
    相关资源
    最近更新 更多