如何将SQL SUM查询结果转为纯数值JSON数组及解决json_decode返回NULL问题
解决方案:调整JSON格式与修复json_decode返回NULL问题
一、将结果转为纯数值数组[10000, 51221, 2351]
你当前得到的是包含键值对的对象数组,核心原因是SQL查询的结果保留了聚合函数的列名,且PHP直接把整行数据加入了数组。可以从两个层面修改:
方法1:修改SQL语句,给聚合结果起别名(更清晰)
给SUM(sales)指定一个简洁的别名,方便PHP精准提取数值:
$sql = "SELECT SUM(sales) AS total_sales FROM sales ..."; // 替换...为你的查询条件 $result = mysqli_query($connection, $sql); $output = array(); foreach($result as $row) { // 将字符串类型的数值转为整数,再加入数组(如需保留小数可改用(float)) $output[] = (int) $row['total_sales']; } $json = json_encode($output); echo $json;
方法2:不修改SQL,直接提取行中的唯一值
如果不想调整SQL,可以用reset()函数取出每行的第一个值(因为你的查询仅返回一列),再转成数值类型:
$sql = "SELECT SUM(sales) from sales ..."; $result = mysqli_query($connection, $sql); $output = array(); foreach($result as $row) { // 提取当前行的唯一值并转为整数 $output[] = (int) reset($row); } $json = json_encode($output); echo $json;
这样处理后,json_encode就会输出你想要的纯数值数组格式。
二、修复json_decode返回NULL的问题
json_decode返回NULL通常是因为JSON字符串无效,或者解码参数使用不当。可以按以下步骤排查修复:
检查JSON有效性:
先输出$json确认内容是否正确,然后用json_last_error_msg()查看具体错误原因:$json = json_encode($output); echo $json; // 检查解码错误 $decoded = json_decode($json); if($decoded === NULL) { echo "解码错误:" . json_last_error_msg(); }常见错误比如JSON包含非法字符、编码问题(比如带BOM的UTF-8)。
正确使用json_decode参数:
如果你想解码成关联数组,必须传入第二个参数true,否则默认返回对象;另外注意:你之前用decode($output)是错误的——$output是PHP数组,不是JSON字符串,应该解码你生成的$json变量:// 解码为关联数组(推荐) $decodedArray = json_decode($json, true); // 解码为对象 $decodedObj = json_decode($json);
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

