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

调用API后用json_decode()转PHP数组失败,is_array检测不通过

为什么json_decode后is_array()检测始终返回false?

这问题我一眼就抓准核心了——你用cURL的时候漏掉了一个关键选项,导致$result根本不是你以为的JSON字符串!

问题根源:cURL的默认行为坑了你

curl_exec()默认会直接把API的响应内容输出到浏览器,而不是将其作为字符串返回给变量$result。所以你的$result实际上是个布尔值:请求成功时返回true,失败时返回false。

你对着这个布尔值执行json_decode(),得到的结果自然不是数组——比如json_decode(true)会返回null,json_decode(false)也返回null,这就解释了为什么is_array()检测始终失败。

修正后的完整代码

只需要给cURL添加CURLOPT_RETURNTRANSFER选项,让它把响应内容返回给变量,而不是直接输出:

$ch = curl_init("https://api.url.com/value/value");
// 添加这个关键选项!让cURL返回响应字符串而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , "token"));
$result = curl_exec($ch);

// 先检查cURL请求是否成功
if ($result === false) {
    die('cURL请求失败: ' . curl_error($ch));
}
curl_close($ch);

// 解码为关联数组(第二个参数传true)
$decoded = json_decode($result, true);

// 检查JSON解码是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解码失败: ' . json_last_error_msg());
}

// 现在再检测就正常了
if (is_array($decoded)) {
    echo "是数组";
} else {
    echo "不是数组";
}

额外提醒

  • 永远要检查cURL请求和JSON解码的错误,这能帮你快速定位问题,避免瞎调试。
  • 如果你不用json_decode的第二个参数,解码后会得到对象而不是数组,这时候is_array()也会返回false,但你已经试过两种方式,所以核心问题还是cURL的选项缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:19:33