如何用PHP从嵌套数组中获取API返回的指定数据?
解决Ethplorer API嵌套JSON数据提取问题
我来帮你搞定这个嵌套JSON数据提取的问题!你之前的代码主要是在处理tokenInfo的时候多套了一层不必要的循环,咱们一步步修正:
首先,ETH的balance字段就在返回数据的最外层ETH对象里,直接访问即可,不需要进入循环:
// 获取并输出ETH余额 echo "ETH Balance: " . $scan_array['ETH']['balance'] . "<br>";
然后是代币部分,你之前对tokenInfo做了额外的foreach循环,但其实tokenInfo是一个单关联数组(不是数组的集合),直接通过键名就能提取address、name、price这些字段。另外为了避免API返回数据缺失导致报错,建议加上isset()判断做兼容。
以下是完整的修正代码:
$address = "0x64890972513558cb4e4b4a7f8af48d892fd097b7"; // 可替换为$_POST['address'] $scan_url = 'https://api.ethplorer.io/getAddressInfo/'.$address.'?apiKey=freekey'; $scan_json = file_get_contents($scan_url); $scan_array = json_decode($scan_json, true); // 输出ETH的balance字段 if (isset($scan_array['ETH']['balance'])) { echo "ETH Balance: " . $scan_array['ETH']['balance'] . "<br><br>"; } // 遍历tokens数组,提取每个代币的指定字段 if (isset($scan_array['tokens']) && is_array($scan_array['tokens'])) { foreach($scan_array['tokens'] as $token) { if (isset($token['tokenInfo'])) { $tokenInfo = $token['tokenInfo']; echo "Token Address: " . $tokenInfo['address'] . "<br>"; echo "Token Name: " . $tokenInfo['name'] . "<br>"; // 兼容price字段为false的情况,实际API可能返回带rate的对象 echo "Token Price: " . ($tokenInfo['price'] !== false ? $tokenInfo['price']['rate'] : 'No price available') . "<br>"; echo "------------------------<br>"; } } }
代码关键点说明:
- 加入
isset()和is_array()判断,防止API返回数据不完整时出现PHP警告 - 直接访问
$token['tokenInfo']下的字段,去掉了多余的内层循环 - 对
price字段做了兼容处理,因为它可能返回false(无价格数据)或者包含具体价格信息的对象
内容的提问来源于stack exchange,提问作者Mohammed Darwish
相关产品推荐
相关产品推荐

