PHP解析嵌套JSON数组:如何打印域名及对应clicks属性
问题分析与解决方案
首先,你的错误根源非常明确:当你调用json_decode($jsonString, true)时,第二个参数true指定了解码结果返回关联数组,而非PHP对象。你尝试调用的children()方法是XML对象(比如SimpleXMLElement)专属的,数组根本没有这个方法,这就直接导致了那个致命错误。
修正后的代码实现
要遍历域名和对应的clicks属性,直接遍历数组的键值对即可,完全不需要children()方法。这里提供两种常见的实现方式,你可以根据输出需求选择:
方式1:直接打印域名与点击数(纯文本/JS日志格式)
<?php header("Content-type: text/javascript"); $jsonString = file_get_contents('stats.json'); // 先处理文件读取失败的情况 if ($jsonString === false) { echo 'console.error("Failed to load stats data");'; exit; } $data = json_decode($jsonString, true); // 处理JSON解码失败的情况 if (json_last_error() !== JSON_ERROR_NONE) { echo 'console.error("Invalid JSON format in stats.json");'; exit; } // 遍历数组,$domain是域名,$stats是该域名的统计数据 foreach ($data as $domain => $stats) { // 这里用JS控制台打印示例,你可以改成自己需要的输出格式 echo "console.log('域名:{$domain},点击量:{$stats['clicks']}');\n"; } ?>
方式2:输出可被前端直接使用的JS对象
如果需要把数据传递给前端JS逻辑使用,可以直接输出一个JS变量:
<?php header("Content-type: text/javascript"); $jsonString = file_get_contents('stats.json'); // 快速校验文件读取与JSON解码是否成功 if ($jsonString === false || ($data = json_decode($jsonString, true)) === null) { echo "const siteStats = {};"; exit; } // 提取需要的域名与点击量数据 $siteClicks = []; foreach ($data as $domain => $stats) { $siteClicks[$domain] = $stats['clicks']; } // 输出为合法的JS对象 echo "const siteStats = " . json_encode($siteClicks) . ";"; ?>
关键知识点回顾
json_decode($str, true)返回关联数组,需用数组语法$array['key']访问元素json_decode($str)返回PHP对象,需用对象语法$obj->key访问元素- 遍历数组键值对时,
foreach($array as $key => $value)可以同时拿到键(此处为域名)和对应的值(统计数据)
内容的提问来源于stack exchange,提问作者undefined
相关产品推荐
相关产品推荐

