You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSONObject中getJSONObject与getString方法无法解析问题求助

问题根源与解决方案

错误原因

你遇到的两个方法找不到的问题,核心是导入的JSON类和代码调用的方法不匹配,加上依赖冲突:

  1. 你导入的是org.json.simple.JSONObject,这个类仅提供get()方法(返回Object类型),没有getJSONObject()和getString()这些强类型方法——这些方法属于另一个JSON库的org.json.JSONObject类。
  2. 你的pom.xml同时引入了com.googlecode.json-simple和org.json两个JSON处理库,类加载时会出现混淆,即使更换版本也无法解决本质的类不匹配问题。

另外,TMDB搜索接口返回的results是JSON数组,不是单个JSONObject,你的代码里直接用getJSONObject("results")还会导致后续运行时错误,这个也要一起修正。


解决方案(推荐使用org.json库)

1. 修正导入语句

把原来的org.json.simple.JSONObject替换为org.json.JSONObject,同时添加JSONArray的导入:

// 移除这行:import org.json.simple.JSONObject;
import org.json.JSONObject;
import org.json.JSONArray;

2. 修正方法代码

处理TMDB返回的结果数组,取第一个结果的海报路径:

public static void getImageFromTMDB(String title) {
    try {
        String apiKey = "47f285ae13541c6a4e42914c1c8f7ef9";
        // 中文标题需要URL编码,否则可能请求失败
        String encodedTitle = java.net.URLEncoder.encode(title, StandardCharsets.UTF_8);
        String urlString = "https://api.themoviedb.org/3/search/movie?api_key=" + apiKey + "&query=" + encodedTitle;
        URL url = new URL(urlString);
        String json = IOUtils.toString(url, StandardCharsets.UTF_8);

        JSONObject jsonObject = new JSONObject(json);
        // results是数组,用getJSONArray获取
        JSONArray results = jsonObject.getJSONArray("results");
        if (results.length() == 0) {
            System.out.println("No movie found for title: " + title);
            return;
        }
        // 取第一个搜索结果
        JSONObject firstResult = results.getJSONObject(0);
        String posterPath = firstResult.getString("poster_path");

        if (posterPath == null || posterPath.isEmpty()) {
            System.out.println("No poster available for this movie");
            return;
        }

        String imageUrl = "https://image.tmdb.org/t/p/w500" + posterPath;
        BufferedImage image = ImageIO.read(new URL(imageUrl));
        File outputFile = new File("src/main/resources/posters/" + title + ".jpg");
        // 确保目录存在,否则保存失败
        outputFile.getParentFile().mkdirs();
        ImageIO.write(image, "jpg", outputFile);
    } catch (IOException e) {
        System.err.println("Error loading poster: " + e.getMessage());
    }
}

3. 清理pom依赖(可选)

如果只使用org.json库,可以移除json-simple的依赖,避免冲突:

<!-- 移除这部分 -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

备选方案(继续使用json-simple)

如果坚持用json-simple,需要调整代码为其API风格:

1. 保持导入

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

2. 修正方法代码

public static void getImageFromTMDB(String title) {
    try {
        String apiKey = "47f285ae13541c6a4e42914c1c8f7ef9";
        String encodedTitle = java.net.URLEncoder.encode(title, StandardCharsets.UTF_8);
        String urlString = "https://api.themoviedb.org/3/search/movie?api_key=" + apiKey + "&query=" + encodedTitle;
        URL url = new URL(urlString);
        String json = IOUtils.toString(url, StandardCharsets.UTF_8);

        // 使用JSONParser解析字符串
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(json);
        JSONArray results = (JSONArray) jsonObject.get("results");
        
        if (results.isEmpty()) {
            System.out.println("No movie found for title: " + title);
            return;
        }
        
        JSONObject firstResult = (JSONObject) results.get(0);
        String posterPath = (String) firstResult.get("poster_path");

        if (posterPath == null || posterPath.isEmpty()) {
            System.out.println("No poster available for this movie");
            return;
        }

        String imageUrl = "https://image.tmdb.org/t/p/w500" + posterPath;
        BufferedImage image = ImageIO.read(new URL(imageUrl));
        File outputFile = new File("src/main/resources/posters/" + title + ".jpg");
        outputFile.getParentFile().mkdirs();
        ImageIO.write(image, "jpg", outputFile);
    } catch (IOException | ParseException e) {
        System.err.println("Error loading poster: " + e.getMessage());
    }
}

3. 清理pom依赖(可选)

移除org.json的依赖,避免冲突:

<!-- 移除这部分 -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20220924</version>
</dependency>

内容的提问来源于stack exchange,提问作者Cerberos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:30:42