PHP使用while循环编码多维数组输出JSON缺少对象间隔逗号如何解决
问题原因
你当前手动拼接JSON结构的写法存在两个问题:
- 循环输出每个行的JSON编码结果时,没有在多个对象之间插入逗号分隔符,导致相邻对象的闭合与起始大括号直接连接为
}{ JSON_PRETTY_PRINT是json_encode的参数,你错误地传给了print_r函数,格式化参数不会生效
最优解决方案:统一构建数组后一次性编码
完全不需要手动拼接JSON结构,先把所有数据整理为符合结构的PHP数组,再用原生json_encode输出,会自动处理所有格式规范(包括逗号、引号转义、格式化等),不会出现语法错误:
// 初始化符合输出结构的数组 $result = [ 'user_activity' => [] ]; // 循环将查询结果写入子数组 while($rsel_userAct_p = mysqli_fetch_array($xsel_userAct_p, MYSQLI_ASSOC)) { $result['user_activity'][] = $rsel_userAct_p; } // 一次性编码输出,自动处理所有格式 echo json_encode($result, JSON_PRETTY_PRINT);
兼容原有写法的修改方案
如果你要保留手动拼接的逻辑,可以增加计数器判断,在非首个元素前加逗号,同时修正参数传递错误:
echo "{\"user_activity\": ["; $isFirst = true; while($rsel_userAct_p = mysqli_fetch_array($xsel_userAct_p, MYSQLI_ASSOC)) { // 非第一个元素先输出逗号分隔 if (!$isFirst) { echo ','; } echo json_encode($rsel_userAct_p, JSON_PRETTY_PRINT); $isFirst = false; } echo "]}";
该方案仅适合临时调整,后续如果要新增字段还需要手动修改拼接逻辑,出错概率更高,更推荐用第一种方案。
内容的提问来源于stack exchange,提问作者Derry
相关产品推荐
相关产品推荐

