PHP $_GET获取MySQL数据生成JSON格式不符问题求助
解决PHP生成JSON格式不符合预期的问题
嘿,我看了你的问题和代码,马上就能发现问题出在哪了——完全是PHP代码里的数组构建逻辑不对,和数据库表结构没关系!
你期望的JSON结构是包含oid字段,以及一个名为comments的数组,但你的当前代码只把查询到的评论数据存进了数组,直接编码输出,既没加oid,也没把评论放到comments键下面,所以才会生成带数字索引的对象(或者数组,取决于PHP对索引的判断)。
修正后的代码
首先我们需要构建一个符合预期结构的关联数组,再编码成JSON:
// 初始化最终要返回的数组,包含oid和空的comments数组 $response = [ 'oid' => $oid, 'comments' => [] ]; // 查询对应oid的评论数据 $result = $conn->query("SELECT name, comment FROM objects WHERE oid='$oid'"); while($row = $result->fetch_assoc()) { // 把每条评论添加到comments数组中 $response['comments'][] = $row; } // 输出格式化后的JSON,注意用JSON常量而不是true echo json_encode($response, JSON_PRETTY_PRINT);
额外注意事项
- SQL注入风险:你直接把
$oid拼接到SQL语句里的做法非常危险,容易被注入攻击,建议改用预处理语句:
// 预处理语句示例,更安全 $stmt = $conn->prepare("SELECT name, comment FROM objects WHERE oid=?"); $stmt->bind_param("s", $oid); // "s"表示参数是字符串类型 $stmt->execute(); $result = $stmt->get_result(); $response = [ 'oid' => $oid, 'comments' => [] ]; while($row = $result->fetch_assoc()) { $response['comments'][] = $row; } echo json_encode($response, JSON_PRETTY_PRINT);
- json_encode参数问题:你之前用的
json_encode($json_array, true)里的true是错误用法,第二个参数应该是PHP的JSON常量,比如JSON_PRETTY_PRINT用于格式化输出,JSON_UNESCAPED_UNICODE用于保留中文不转义等。
这样修改后,输出的JSON就会完全符合你期望的格式啦!
内容的提问来源于stack exchange,提问作者G3org3333
相关产品推荐
相关产品推荐

