Java - 从URL获取JSON数据

3

我试图从http://api.conceptnet.io/c/en/concept获取一个JSON文档,但是我没有成功地将JSON数据存入一个变量中。我所能做的只是获取页面的源代码(具体来说只有第一行,但我明白为什么只有一行):

InputStream stream = url.openStream();
Scanner scan = new Scanner(stream);
String data = scan.nextLine();
System.out.println(data);

这并没有帮助。 如果我能将JSON数据转换为字符串,我可以将其提供给JSONObject构造函数来构建JSONObject。如果我在Python中执行此操作,我只需执行以下操作:

concept = requests.get('http://api.conceptnet.io/c/en/' + theword).json()

但我不知道Java中的等效方法。我的Web请求经验很少,所以感谢任何帮助。


你可以使用ObjectMapper或JsonObject将响应体解析为Json。 - codeogeek
那么,你的问题是将数据带入还是将JSON字符串转换为JSON对象? - KunLun
@KunLun 我正在尝试从网站获取数据。JSONObject有一个构造函数,接受一个字符串并将其转换为JSONObject。 - Robobot1747
2个回答

1

有多种方法可以在Java中获取JSON。

  • 如果您正在使用Java 11,则可以使用Java内置的Web客户端。

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("http://api.conceptnet.io/c/en/concept"))
      .build();
    client.sendAsync(request, BodyHandlers.ofString())
      .thenApply(HttpResponse::body)
      .thenAccept(System.out::println)
      .join();


使用像OkHttp这样的库,您需要创建一个请求并将其提供给HttpClient。

    Request request = new Request
       .Builder()
       .url("http://api.conceptnet.io/c/en/concept")
       .get()
       .build()

    OkHttpClient httpClient = client.newBuilder().build()
    Response response = httpClient.newCall(request).execute()
    System.out.println(response.body.string())


谢谢你的帮助。你知道我在哪里可以下载OkHTTP库吗?我似乎找不到官方来源。谢谢! - Robobot1747
OkHttp 如果你正在使用像 Maven 或 Gradle 这样的构建工具,你可以将其添加为依赖项。 - jøkęr
我找到了.jar文件并将其添加到我的构建路径中,但是当我运行类似于你的程序时,出现了NoClassDefFoundError错误。我查阅了相关资料,发现一个可能的情况是在编译后删除了.class文件,但我没有这样做。你有什么想法吗? - Robobot1747
没有查看代码和设置很难说,但似乎jar文件没有被加载。 - jøkęr

0

然而,Pythonic的方式似乎更容易,但在Java中,它不能比这更容易了。

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://api.conceptnet.io/c/en/concept")).build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
JSONObject myObject = new JSONObject(response.body());
System.out.println(myObject); // Your json object

别忘了添加以下依赖项。

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.json.JSONObject;

在编程中,可以在此处找到org.json的依赖项:https://mvnrepository.com/artifact/org.json/json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接