PHP过滤API返回JSON响应并指定字段输出的问题求助
问题解决:Uncaught TypeError 错误修复及代码优化
错误原因
你用foreach($data as $values)的遍历逻辑完全错了。$data是解析API返回得到的单层关联数组,遍历它时$values会依次拿到每个字段的具体值(比如第一个循环拿到字符串"ACTIVE",第二个是"DEFAULT",第三个是add对应的数组)。这时候你再写$values["status"],相当于给字符串加数组偏移,自然触发类型错误。另外你的echo语法也有问题,多个echo不能用逗号连接。
正确写法
不需要遍历,直接从$data数组里提取指定的三个字段即可:
<?php $headers = [ "User-Agent: Test API", "token: *my-token*" ]; $accountid = $_POST['accountid']; $url = "https://my+api+url/$accountid"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); // 用HTTP状态码判断404,比正则匹配更可靠 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 先校验JSON解析是否成功 $data = json_decode($result, true); if ($data === null) { echo "API响应解析失败"; exit; } if ($httpCode === 404){ echo "AccountID invalid."; } else { echo "AccountID valid:\n"; // 直接提取目标字段输出 echo "status: " . $data["status"] . "\n"; echo "modified: " . $data["modified"] . "\n"; echo "_id: " . $data["_id"] . "\n"; } ?>
额外优化点
- 替换404判断逻辑:用
curl_getinfo获取HTTP状态码判断404,比正则匹配响应体里的"404"更准确,避免误判场景。 - 增加JSON解析校验:
json_decode失败会返回null,加判断可以避免后续操作报错。 - 修正echo语法:多个输出语句分开写,或用字符串拼接,不要用逗号连接多个echo。
内容的提问来源于stack exchange,提问作者cyberphantom
相关产品推荐
相关产品推荐

