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
相关产品推荐
相关产品推荐

