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

PHP遍历Nanopool返回的复杂JSON对象失败,求解决方案

如何正确遍历Nanopool API返回的支付记录JSON数据

我来帮你解决这个遍历Nanopool API返回数据的问题,你的代码出错主要是两个原因:没有定位到正确的数据数组,以及混淆了对象和数组的访问方式。

首先,你用json_decode($json)得到的是一个stdClass对象,从var_dump的结果能看到,这个对象有两个属性:status(布尔值)和data(存储支付记录的数组)。你之前的foreach($decode as $item)是直接遍历整个顶层对象,第一个循环拿到的是status的值,这显然不是你要的支付记录,自然会报错。

而且,data数组里的每一条记录也是stdClass对象,不是关联数组,所以不能用$item['date']这种数组键名的方式访问属性,得用对象的属性访问符->。

正确的遍历代码(对象方式)

$json = file_get_contents("https://api.nanopool.org/v1/eth/payments/0x218494b2284a5f165ff30d097d3d7a542ff0023B");
$decode = json_decode($json);

// 先判断接口返回状态是否成功
if ($decode->status === true) {
    // 遍历data数组里的每一条支付记录
    foreach ($decode->data as $payment) {
        // 用对象属性访问方式获取值
        $date = $payment->date;
        $amount = $payment->amount;
        // 可以在这里处理数据,比如格式化日期、输出等
        echo "日期:" . date('Y-m-d H:i:s', $date) . ",金额:" . $amount . "<br>";
    }
} else {
    echo "API请求失败";
}

可选:转成关联数组遍历

如果你更习惯用数组的方式访问,可以在json_decode的时候加上第二个参数true,这样会把JSON转成关联数组:

$json = file_get_contents("https://api.nanopool.org/v1/eth/payments/0x218494b2284a5f165ff30d097d3d7a542ff0023B");
// 第二个参数true,转成关联数组
$decode = json_decode($json, true);

if ($decode['status'] === true) {
    foreach ($decode['data'] as $payment) {
        $date = $payment['date'];
        $amount = $payment['amount'];
        echo "日期:" . date('Y-m-d H:i:s', $date) . ",金额:" . $amount . "<br>";
    }
} else {
    echo "API请求失败";
}

为什么你的原代码不行?

  1. 遍历对象错误:你直接遍历顶层的$decode对象,它包含status和data两个属性,第一个循环拿到的是true(status的值),这个布尔值没有date属性,直接报错。
  2. 访问方式错误:即使你遍历到data数组,里面的元素是对象,用$item['date']这种数组访问方式会触发错误,因为对象不能用数组键名访问属性。

这样应该就能正确提取每条记录的date和amount了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:36