You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用while循环编码多维数组输出JSON缺少对象间隔逗号如何解决

问题原因

你当前手动拼接JSON结构的写法存在两个问题:

  1. 循环输出每个行的JSON编码结果时,没有在多个对象之间插入逗号分隔符,导致相邻对象的闭合与起始大括号直接连接为}{
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:24:04