因此,我试图访问json文件中的数据,并遍历每个项目以分别打印出来,而不是整个json文件,但是我收到以下错误消息。我试图对其进行搜索,但没有任何帮助。顺便说一句,我正在使用Eclipse,并且已导入JSON外部JAR。
这是完整的代码:
import java.net.*;
import java.net.http.*;
import org.json.JSONArray;
import org.json.JSONObject;
public class HTTPreq {
public HTTPreq() {
}
public static void main(String[]args) {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/albums")).build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenApply(HTTPreq::parse)
.join();
}
public static String parse(String responseBody) {
JSONArray albums = new JSONArray(responseBody); //<-----I get the error here
for (int i=0;i<albums.length(); i++) {
JSONObject album = albums.getJSONObject(i);
int id = album.getInt("id");
int userId = album.getInt("useId");
String title = album.getString("title");
System.out.println(id + " " + userId + " " + title);
}
return null;
}
}
这是错误消息:
Exception in thread "main" java.util.concurrent.CompletionException: java.lang.NoClassDefFoundError: org/json/JSONArray
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:645)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:840)
at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.NoClassDefFoundError: org/json/JSONArray
at HTTPreq.parse(HTTPreq.java:23)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:642)
... 9 more
Caused by: java.lang.ClassNotFoundException: org.json.JSONArray
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 11 more
问题是由于线程sendAsync,如果您使用client.execute
,应该没问题。或client.sync()