PHP中JSON响应预期为布尔值却返回整数,无法读取JSON元素
解决PHP中JSON解析后返回整数的问题
嘿,我之前也踩过这个一模一样的坑!咱们先把问题根源揪出来——你的curl配置少了关键选项,导致curl_exec()返回的不是接口的响应内容,而是curl的执行状态(成功返回1,失败返回0),所以你用json_decode()去解析这个整数,自然得到的就是整数类型了!
一步步修正你的代码:
- 添加
CURLOPT_RETURNTRANSFER选项:这是核心!让curl把接口响应内容以字符串形式返回,而不是直接输出到页面或者返回执行状态 - 完善错误链路处理:不管是curl请求失败,还是JSON格式本身有问题,都能快速定位故障点
- 增加调试环节:方便你确认原始响应是否符合预期
修正后的完整代码:
<?php $url = '...'; // 替换成你的目标接口URL $curl = curl_init(); // 补充关键的CURLOPT_RETURNTRANSFER选项 curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, // 让curl返回响应内容而非执行状态 CURLOPT_FOLLOWLOCATION => true, // 可选:自动跟随URL跳转 CURLOPT_SSL_VERIFYPEER => false, // 可选:本地调试时临时关闭SSL验证(生产环境请开启) )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); // 先处理curl请求错误 if ($err) { echo "CURL请求失败: " . $err; exit; } // 调试阶段可以先输出原始响应,确认是不是有效的JSON // echo "原始响应内容: " . $response; // 解析JSON并检查解析错误 $responseData = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON解析错误: " . json_last_error_msg(); exit; } // 现在看看解析后的结果 echo "解析后类型: " . gettype($responseData); print_r($responseData); // 输出完整的解析内容 ?>
额外排查建议:
如果还是出现异常,先直接输出$response的原始内容——有可能接口返回的不是JSON(比如返回了HTML错误页面、纯文本提示),这时候json_decode()也会返回null或者异常类型。
内容的提问来源于stack exchange,提问作者hello_its_me
相关产品推荐
相关产品推荐

