这可能是一个愚蠢的问题,但是在Java中从URL读取和解析JSON的最简单的方法是什么?
在Groovy中,这只是几行代码的问题。我发现Java示例长得离谱(并且有巨大的异常处理块)。
我所要做的就是阅读这个链接的内容。
这可能是一个愚蠢的问题,但是在Java中从URL读取和解析JSON的最简单的方法是什么?
在Groovy中,这只是几行代码的问题。我发现Java示例长得离谱(并且有巨大的异常处理块)。
我所要做的就是阅读这个链接的内容。
当前回答
我想在这里添加一个更新的答案,因为最近对JDK的更新使读取HTTP URL的内容变得更容易了。 正如其他人所说,您仍然需要使用JSON库来进行解析,因为JDK目前还不包含JSON库。 下面是一些最常用的Java JSON库:
组织。杰伦 FasterXML Jackson 格森
要从URL检索JSON,这似乎是严格使用JDK类的最简单方法(但对于大型有效负载,可能不是您想要做的事情),Java 9介绍了:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InputStream.html#readAllBytes()
try(java.io.InputStream is = new java.net.URL("https://graph.facebook.com/me").openStream()) {
String contents = new String(is.readAllBytes());
}
例如,使用GSON库解析JSON
com.google.gson.JsonElement element = com.google.gson.JsonParser.parseString(contents); //from 'com.google.code.gson:gson:2.8.6'
其他回答
使用HttpClient获取URL的内容。然后使用来自json.org的库来解析JSON。我在许多项目中使用过这两个库,它们都很健壮,使用起来很简单。
除此之外,你可以尝试使用Facebook API java库。我在这方面没有任何经验,但有一个关于在java中使用Facebook API的堆栈溢出的问题。您可能希望将RestFB视为使用库的一个不错选择。
如果你不介意使用几个库,它可以在一行中完成。
包括Apache Commons IOUtils和json.org库。
JSONObject json = new JSONObject(IOUtils.toString(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8")));
Maven的依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
Oracle文档描述了如何操作
一个HttpRequest被构建,然后 由HttpClient发送给URL
只需几行代码,通过使用Java类库。把这段代码放到你的main方法中:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://example.com/"))
.build();
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
响应由JSON对象{…},并可在您的申请中进一步处理。 在这里我把它打印到控制台,只是为了确认它是有效的:
System.out.println(request);
这可用于Java版本11+
我不确定这是否有效,但这是一种可能的方法:
使用url. openstream()从url读取json,并将内容读入字符串。
用这个字符串构造一个JSON对象(更多信息请访问json.org)
JSONObject(java.lang.String source)
Construct a JSONObject from a source JSON text string.
这很简单,使用jersey-client,只需要包含这个maven依赖:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>
然后使用下面的例子调用它:
String json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(String.class);
然后使用谷歌的Gson来解析JSON:
Gson gson = new Gson();
Type gm = new TypeToken<CoinDeskMessage>() {}.getType();
CoinDeskMessage cdm = gson.fromJson(json, gm);