如何提取MySQL存储的JSON格式字段内容并在PHP页面展示
问题原因
你遇到的报错核心来自两个问题:
- 自定义拆分函数存在基础语法错误:函数内循环赋值用的变量是
$arrayToReturn,但最终返回的是未做任何赋值的$array,导致返回值始终是空数组,自然不存在io16索引 - 手动拆分JSON属于冗余操作:你存储的是标准JSON格式字符串,PHP内置的
json_decode函数已经可以实现安全、稳定的解析,手动拆分还容易因为值内包含逗号、冒号等特殊字符出现解析错误。
最优修复方案(推荐)
直接抛弃自定义拆分逻辑,使用原生JSON解析方法即可:
<?php $result = mysql_query("SELECT * FROM gs_objects WHERE imei = '354018115539821' "); while ($row = mysql_fetch_array($result)) { // 第二个参数传true表示将JSON解析为关联数组 $data = json_decode($row['params'], true); echo $row['params']; echo "</br>"; echo $data['io16']; } ?>
自定义拆分函数的修复方案
如果你需要保留自定义拆分逻辑,需要修正两个问题:变量名不一致、未过滤JSON首尾的大括号:
function populateArrayFromString($string) { // 先去除JSON首尾的大括号 $string = trim($string, '{}'); $arrayToReturn = []; $pairs = explode(",", $string); foreach ($pairs as $pair) { list($key, $value) = explode(":", $pair); $arrayToReturn[trim($key, '"')] = trim($value, '"'); } // 返回正确的结果变量 return $arrayToReturn; }
注意:该自定义方案仅适用于当前JSON值中无逗号、冒号等特殊字符的场景,兼容性和稳定性远低于原生
json_decode,非特殊情况不建议使用。
额外建议
你使用的mysql_*系列数据库操作函数已经在PHP5.5版本后被官方废弃,存在兼容性和安全风险,建议更换为mysqli_*系列函数或者PDO扩展操作数据库。
内容的提问来源于stack exchange,提问作者Maggie Ackermann
相关产品推荐
相关产品推荐

