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

PHP 7.4解析API返回JSON报错,如何完成正确解析?

问题修复方案

核心错误原因

你的代码未开启curl的CURLOPT_RETURNTRANSFER选项,导致curl_exec()不会把API返回的JSON内容赋值给$output,而是直接输出到页面。此时$output实际是curl执行成功的状态值(整数1),json_decode()解析整数后返回NULL,后续访问$decoded->count或$decoded['count']时自然触发“尝试访问int类型值的数组偏移量”错误。

修复步骤

  1. 添加CURLOPT_RETURNTRANSFER选项,让curl将响应内容以字符串形式返回给变量
  2. 增加错误检查,排查curl执行和JSON解析过程中的问题

修正后的完整代码

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://pokeapi.co/api/v2/generation/?limit=2');
// 开启返回内容到变量的选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// GET请求无需Content-Type请求头,可移除
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

$output = curl_exec($ch);

// 检查curl执行是否成功
if(curl_errno($ch)){
    echo 'Curl错误:' . curl_error($ch);
    curl_close($ch);
    exit;
}
curl_close($ch);

// 检查JSON解析是否成功
$decoded = json_decode($output, false);
if(json_last_error() !== JSON_ERROR_NONE){
    echo 'JSON解析错误:' . json_last_error_msg();
    exit;
}

// 正常访问对象属性
echo $decoded->count;

// 如果要解析为数组,使用:
// $decoded = json_decode($output, true);
// echo $decoded['count'];

补充说明

  • PHP版本差异不影响该curl选项的行为,大概率是之前的代码包含该选项但本次遗漏
  • Content-Type: application/json用于POST请求声明请求体格式,GET请求无需设置,移除后不影响API响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:52