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

PHP生成指定格式JSON数组:如何将数据存入data子数组

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

你现在的问题核心是把查询到的行数据放错位置了——你直接把新数组push到了外层的$dataArray里,而不是它内部的data子数组,这就导致外层数组同时有data键和0、1这类数字索引,而真正需要存数据的data数组一直是空的。

修改后的完整代码

$_SESSION['userID'] = $userID;
include('USERconfig.php');
// 初始化包含data子数组的结构
$dataArray = array("data"=>array());
$sql = "SELECT name, age FROM dataQue";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
// 把每一行数据push到$dataArray['data']里,而不是外层数组
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    array_push($dataArray['data'], array("name"=>$row['name'],"age"=>$row['age']));
    // 或者更简洁的写法:
    // $dataArray['data'][] = ["name" => $row['name'], "age" => $row['age']];
}
sqlsrv_free_stmt( $stmt);
header('Content-Type: application/json');
echo json_encode($dataArray);
exit();

关键修改点解释

  • 原来的array_push($dataArray, ...)是往外层的$dataArray添加元素,这样外层数组就会同时有字符串键data和数字索引0、1...,导致JSON结构不符合预期。
  • 修改为array_push($dataArray['data'], ...)(或者更常用的$dataArray['data'][] = ...),是把每一行数据添加到data子数组里,这样最终的JSON就会是你想要的{"data":[{"name":"xxx","age":"xxx"},...]}格式,不会出现多余的数字索引键。

另外补充一下,sqlsrv_fetch_array用SQLSRV_FETCH_ASSOC已经是返回关联数组了,所以直接取$row['name']和$row['age']是没问题的,不需要额外处理。

内容的提问来源于stack exchange,提问作者Elinoter99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:33