gpt4 book ai didi

java - 对 moviedb 的 JSON 请求解析错误

转载 作者:行者123 更新时间:2023-12-02 13:37:31 24 4
gpt4 key购买 nike

当我向 movieDb.org(最受欢迎或评分最高的电影)发出请求时,出现以下错误:

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JsonObject cannot be cast to org.json.simple.JsonArray
at Main.main(Main.java:47)

我的代码是:

import org.json.simple.DeserializationException;
import org.json.simple.JsonArray;
import org.json.simple.JsonObject;
import org.json.simple.Jsoner;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;

public class Main {

private static final String API_URL = "https://[site]/3/movie/top_rated?api_key=00dd64934f886ad5f0a1257af58fda25";
public static void main(String[] args) {
StringBuilder buffer = new StringBuilder();
try {
URL url = new URL(API_URL);
// GET PAGE CONTENT
Scanner contentScan = new Scanner(url.openStream());
while (contentScan.hasNextLine()) {
String line = contentScan.nextLine();
buffer.append(line).append("\n");
}
} catch (IOException ex) {
ex.printStackTrace();
}

try (FileOutputStream fos = new FileOutputStream("file.json")) {
fos.write(buffer.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}

String jsonResponse = buffer.toString();
try {
// PARSE JSON
JsonArray movieResult = (JsonArray) Jsoner.deserialize(jsonResponse);

for (int i = 0; i < movieResult.size(); i++) {
// GET JSON OBJECT FROM ARRAY
JsonObject movie = (JsonObject) movieResult.get(i);

// GET DATA FROM OBJECT
String object = movie.getString("object");
int page = movie.getInteger("page");
String poster_path = movie.getString("poster_path");
boolean adult = movie.getBoolean("adult");
String overview = movie.getString("overview");
String release_date = movie.getString("realese_date");
int id = movie.getInteger("id");
String original_title = movie.getString("original_title");
String original_lang = movie.getString("original_language");
String title = movie.getString("tite");
double pop = movie.getDouble("popularity");
int vote = movie.getInteger("vote_count");
boolean video = movie.getBoolean("video");
// PRINT DATA
System.out.printf(object +" "+ page + "\n");
System.out.printf("%s %s B: %6.3f S: %6.3f [Q:1]\n", poster_path, adult, overview, release_date, id, original_title, original_lang, title, pop, vote, video);
}
} catch (DeserializationException e) {
e.printStackTrace();
}
}
}

最佳答案

服务器 JSON 响应不是 JsonArray,而是包含 JsonArrayJsonObject:

{
"page": 1,
"results": [{
"poster_path": "\/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg",
"adult": false,
"overview": "Framed in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.",
"release_date": "1994-09-23",
"genre_ids": [18, 80],
"id": 278,
"original_title": "The Shawshank Redemption",
"original_language": "en",
"title": "The Shawshank Redemption",
"backdrop_path": "\/xBKGJQsAIeweesB79KC89FpBrVr.jpg",
"popularity": 10.718322,
"vote_count": 6557,
"video": false,
"vote_average": 8.4
},
...
]
}

因此,在迭代每个电影数据之前,您必须使用 results 键,如下所示(这只是 PARSE JSON 部分,因为其他代码行看起来几乎不错):

// Parse server response to JsonObject
JsonObject movieResultWrapper = (JsonObject) Jsoner.deserialize(jsonResponse);

// Get JsonArray link to "results" key
JsonArray movieResult = (JsonArray) movieResultWrapper.get("results");

// Iterate over your JsonArray and process data
for (int i = 0; i < movieResult.size(); i++) {
JsonObject movie = (JsonObject) movieResult.get(i);

// Be careful in your code your are trying to get "object" and "page" but these keys do not exist!
// String object = movie.getString("object");
// int page = movie.getInteger("page");

// All others parsing look good
String poster_path = movie.getString("poster_path");
boolean adult = movie.getBoolean("adult");
String overview = movie.getString("overview");
String release_date = movie.getString("realese_date");
int id = movie.getInteger("id");
String original_title = movie.getString("original_title");
String original_lang = movie.getString("original_language");
String title = movie.getString("tite");
double pop = movie.getDouble("popularity");
int vote = movie.getInteger("vote_count");
boolean video = movie.getBoolean("video");
// PRINT DATA
// System.out.printf(object +" "+ page + "\n");
System.out.printf("%s %s B: %6.3f S: %6.3f [Q:1]\n", poster_path, adult, overview, release_date, id, original_title, original_lang, title, pop, vote, video);
}

关于java - 对 moviedb 的 JSON 请求解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com