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

PHP将SQL查询结果转换为指定格式JSON的问题

解决PHP将SQL查询结果转为指定JSON格式的问题

你遇到的问题主要有两个核心点:一是mysqli_fetch_array()默认只读取单条数据,二是它默认返回的是包含关联键和索引键的混合数组,导致json_encode()输出不符合预期。要得到你想要的JSON结构,需要循环收集所有数据并构建纯索引数组。

问题拆解

  1. mysqli_fetch_array()的局限:这个函数每次调用仅返回结果集中的一行,且默认使用MYSQLI_BOTH模式——返回的数组同时包含数字索引和字段名作为键名,json_encode()会把这种混合数组转成JSON对象(用{}包裹),而非你需要的数组结构(用[]包裹)。
  2. 你需要的标准JSON结构:外层是一个数组,每个元素是包含ID、name、status、value的纯索引数组(无键名)。这里要提一句:你示例中用{}包裹每个元素是不符合JSON语法的,{}是JSON对象的标识,必须包含键值对;纯值集合应该用[]包裹,这是JSON的规范要求。

解决方案:循环构建纯索引数组

我们可以用mysqli_fetch_row()直接获取每行的索引数组,再循环把所有行收集到一个大数组中,最后转成JSON即可:

// 执行查询
$sql = "SELECT * FROM example where status='open'";
$result = mysqli_query($link, $sql);

// 初始化空数组存储所有数据
$arrayofdata = [];

// 循环遍历结果集,收集每行的索引数组
while ($row = mysqli_fetch_row($result)) {
    // 可选:将ID从字符串转为整数(mysqli默认返回字符串类型)
    $row[0] = (int)$row[0];
    $arrayofdata[] = $row;
}

// 转换为目标JSON格式
$JSONED = json_encode($arrayofdata);

最终输出

执行后$JSONED的内容就是符合规范的目标格式:

[[1,"name1","open","value1"],[2,"name2","open","value2"]]

额外拓展

如果后续需要转为带字段名的JSON对象数组(比如[{"ID":1,"name":"name1",...},...]),只需把mysqli_fetch_row()换成mysqli_fetch_assoc(),收集关联数组后再转JSON即可。


内容的提问来源于stack exchange,提问作者Pedro Jose Otero Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:06