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

PHP调用返回JSON的API提取Data字段时出现非对象属性获取错误

嘿,这个报错我之前踩过好几次!咱们先搞懂为啥会出这个问题,再一步步把代码修好:

问题根源

这个Notice: Trying to get property 'Data' of non-object错误本质很简单:你想访问某个“对象”的Data属性,但这个所谓的“对象”根本不是合法对象——它可能是null、false、数组,甚至是一堆乱码字符串。

你的代码里的明显bug

先揪出最显眼的低级错误:你定义$url的时候多写了一个右括号!

// 原错误代码:
$url = "https://api.weleakinfo.com/v2/public/email/$email");
// 修正后:
$url = "https://api.weleakinfo.com/v2/public/email/$email";

这个语法错误会直接导致代码执行中断,连API请求都发不出去,更别说拿到有效响应了。

完整修复后的代码(带全链路安全检查)

我给你补全了所有必要的错误校验环节,避免再踩类似的坑:

<?php
ini_set("allow_url_fopen", 1);
if(isset($_GET['email'])) {
    $email = $_GET['email'];
    // 修复语法错误:移除多余的右括号
    $url = "https://api.weleakinfo.com/v2/public/email/$email";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url); // 别忘了设置请求URL!原代码可能遗漏了这行
    
    // 执行请求并获取响应
    $response = curl_exec($ch);
    
    // 检查CURL请求是否失败(比如网络问题、API地址错误)
    if(curl_errno($ch)) {
        die("请求失败:" . curl_error($ch));
    }
    curl_close($ch);
    
    // 解析JSON并检查是否解析成功
    $data = json_decode($response);
    if(json_last_error() !== JSON_ERROR_NONE) {
        die("JSON解析失败:" . json_last_error_msg());
        // 调试时可以打开下面这行,看看API实际返回的内容
        // echo "原始响应:" . $response;
    }
    
    // 安全访问Data字段(先判断是否存在)
    if(isset($data->Data)) {
        // 这里写你的业务逻辑,比如打印或处理Data内容
        print_r($data->Data);
    } else {
        echo "API响应中没有找到Data字段,或者响应结构不符合预期";
        // 调试用:打印完整解析后的数据,看看API返回的结构
        // print_r($data);
    }
} else {
    echo "请通过?email=xxx的方式传入邮箱参数";
}
?>
关键修复细节
  • 修复语法错误:去掉URL末尾多余的右括号,确保代码能正常执行
  • 增加CURL请求校验:用curl_errno判断请求是否成功,避免请求失败后还去解析无效的响应内容
  • 增加JSON解析校验:用json_last_error确保响应是有效的JSON格式,否则json_decode会返回null,此时访问null->Data就会触发你遇到的Notice
  • 安全访问属性:用isset($data->Data)先判断属性是否存在,再去访问,避免直接访问不存在的属性导致报错
额外小提示

如果API返回的是JSON数组(而非对象),你可以把json_decode($response)改成json_decode($response, true),这样会得到一个关联数组,之后用isset($data['Data'])和$data['Data']来访问对应字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:25