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

PHP从API返回JSON数组获取doc_id报错的解决方法

解决PHP访问API响应数据时的"Illegal string offset 'doc_id'"异常

我来帮你排查这个问题,你遇到的Illegal string offset 'doc_id'错误,本质是代码处理API响应的方式不对,导致你试图在字符串上使用数组键名访问,这自然会触发报错。

问题根源

你原来的代码里做了多余的json_encode操作:

$landerProperties = json_decode(json_encode($landerProperties,true),true);

如果$request->data本身就是API返回的JSON字符串,这行代码会先把字符串转成带引号的JSON格式字符串,再解码后就变成了普通字符串,而非你期望的数组结构。这时候$landerProperties[0]取到的是字符串的第一个字符,再用['doc_id']访问就触发了非法偏移的错误。

正确的处理方式

直接把API返回的JSON字符串解码成关联数组即可,不需要多余的编码再解码步骤:

// 第一步:直接解码API返回的JSON数据为关联数组
$landerProperties = json_decode($request->data, true);

// 第二步:先验证数据结构是否符合预期,避免空数据或解码失败的情况
if (is_array($landerProperties) && !empty($landerProperties)) {
    // 获取doc_id并转为整数
    $id = (int)$landerProperties[0]['doc_id'];
    
    // 遍历移除每个元素中的doc_id字段
    foreach ($landerProperties as &$value) {
        // 先判断字段是否存在,避免unset不存在的键报错
        if (isset($value['doc_id'])) {
            unset($value['doc_id']);
        }
    }
    unset($value); // 释放foreach中的引用,避免后续变量污染
} else {
    // 处理数据为空或解码失败的情况,比如设默认值或抛出提示
    $id = 0;
    // 或者:throw new Exception('API响应数据格式错误或为空');
}

额外提示

  • 可以用json_last_error()排查JSON解码是否失败,比如:
    $landerProperties = json_decode($request->data, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo 'JSON解码失败:' . json_last_error_msg();
    }
    
  • 始终先验证数据结构再访问,避免因API返回格式变化导致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:23:26