为何Rapid API未返回JSON?WebScraping新手开发求助
问题分析与解决
嘿,我一眼就看出问题出在哪啦!你现在输出的不是JSON,是因为你打印的是OkHttp的Response对象本身的字符串描述,而不是API返回的实际响应体内容。response.toString()只会输出请求的元数据(比如协议版本、状态码、请求URL这些),根本没触及到里面的JSON数据。
具体解决步骤
1. 读取响应体的正确姿势
要拿到API返回的JSON,你需要调用response.body().string()方法来读取响应体的字符串内容。不过有两个小细节要注意:
response.body().string()只能调用一次,调用后响应体就会被自动关闭- 推荐用try-with-resources语法来自动管理Response对象,避免资源泄漏
2. 修改后的完整代码
这里给你调整好的代码,直接替换原来的就能用:
import java.io.IOException; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class AAA { public static void main(String args[]) throws IOException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api-football-v1.p.rapidapi.com/v2/fixtures/league/1383/last/10?timezone=Europe%252FLondon") .get() .addHeader("x-rapidapi-host", "api-football-v1.p.rapidapi.com") .addHeader("x-rapidapi-key", "myRapidAPIKey") .build(); // 使用try-with-resources自动关闭Response,不用手动处理资源释放 try (Response response = client.newCall(request).execute()) { // 先检查请求是否真的成功(虽然状态码200,但保险起见) if (!response.isSuccessful()) { throw new IOException("请求失败: " + response); } // 读取并打印实际的JSON响应内容 String jsonContent = response.body().string(); System.out.println(jsonContent); } } }
3. 额外注意点
- 确认你添加的JAR包是完整的:OkHttp依赖OkIO库,所以除了
okhttp.jar,还要确保把okio.jar也加入到项目里,不然可能会出现运行时找不到类的错误。 - 状态码200说明你的API密钥、端点都是有效的,不用怀疑这部分的问题,只是之前没读取到正确的内容而已。
内容的提问来源于stack exchange,提问作者Tudor Stoica
相关产品推荐
相关产品推荐

