file_get_contents获取JSON后json_decode无结果,求助转数组/对象
解决json_decode解析失败的问题
我来帮你搞定这个JSON解析的问题!首先咱们得先搞清楚为什么json_decode没返回结果,然后一步步解决:
第一步:排查JSON解析失败的原因
当json_decode返回null或者没有结果时,大概率是JSON格式有问题(或者获取到的内容本身就不是有效的JSON)。你可以通过json_last_error()和json_last_error_msg()来查看具体错误,这是排查这类问题的关键。
试试这段代码先确认问题:
$val = file_get_contents('https://example.com/getStatsData'); // 先检查是否成功获取到内容 if ($val === false) { die("无法获取统计数据,请检查URL是否正确或服务器是否可达"); } // 尝试解析JSON,第二个参数设为true会返回关联数组(方便操作) $result = json_decode($val, true); // 检查解析是否出错 if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON解析错误:" . json_last_error_msg(); exit; }
第二步:成功解析后提取数据
从你提供的JSON内容来看,结构是嵌套数组的形式:
{"msg":"success","data":[[{"stats_abc":"1223","stats_bcd":"55684","stats_cda":"14999","stats_def":232456,"stats_efg":"432868","stats_fgh":"7558","stats_ghi":"3,778.72","stats_date":"20-01-2018 17:00 PM"}],null]}
解析后,$result会是一个关联数组,你可以这样提取统计数据:
// 确认请求成功 if ($result['msg'] === 'success') { // 提取目标统计数据(注意data是数组套数组,第一个元素里的第一个元素才是我们要的统计数据) $statsArray = $result['data'][0][0]; // 现在你可以直接访问各个统计字段了 echo "stats_abc的值:" . $statsArray['stats_abc']; echo "<br>"; // 如果需要把带逗号的数字字符串转成数值,可以做额外处理 $statsGhi = (float)str_replace(',', '', $statsArray['stats_ghi']); echo "转成数值后的stats_ghi:" . $statsGhi; }
可能的隐藏问题
- 如果
file_get_contents获取的内容带有UTF-8 BOM头,会导致JSON解析失败,你可以用这段代码去除:
$val = preg_replace('/^\x{EF}\x{BB}\x{BF}/', '', $val);
- 你也可以先执行
var_dump($val),确认获取到的内容和你提供的JSON完全一致,没有多余的空格、换行或其他非JSON字符。
内容的提问来源于stack exchange,提问作者nishant
相关产品推荐
相关产品推荐

