【问题标题】:Encoding json with php用php编码json
【发布时间】:2016-04-01 18:38:11
【问题描述】:

所以事情是这样的:

我正在开发一个后端 (php),它通过 android 应用程序连接 Microsoft SQL Server 作为用户界面。

但是,在使用 php 编码 json 时,我遇到了一个问题。

说我是 php 初学者是非常公平的。

这是我的代码:

$result = sqlsrv_query( $conn, 'select * from table1');
 $row = sqlsrv_fetch_array($result);
 $array = array();
while($row =sqlsrv_fetch_array($result))
{
    $array[]=$row;
}
echo json_encode(array("data"=>array_values($array)));

所以到目前为止该表实际上没有任何内容: 只有两个属性:姓名和年龄

这里的问题是返回如下:

{"data":[{"0":"Miriana","name":"Miriana","1":null,"age":null},{"0":"Luke","name":"Luke","1":null,"age":null},{"0":"Sara","name":"Sara","1":null,"age":null},{"0":"Fuss","name":"Fuss","1":20,"age":20}]}

在值之前总是有一个数字,一个值,然后是真正的键和一个值。

例如:

"0":"Miriana"
 "1":null

非常感谢任何愿意查看此内容的人。

**我检查了这些链接: Decode json With PHP not working Parsing JSON with PHP Encoding JSON with PHP issues with array **

【问题讨论】:

  • echo json_encode($array); 怎么样?或者如果您需要“数据”的密钥echo json_encode(array("data"=>$array));

标签: php sql-server json encoding


【解决方案1】:

您需要指定获取类型:

while($row =sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))

默认情况下,您会同时获得数字键和关联键。

并且您可能应该在循环之前删除 fetch,因为您不会在当前结果中获得第一行。

【讨论】:

    【解决方案2】:

    sqlsrv_fetch_array 的默认获取类型是SQLSRV_FETCH_BOTH,它以关联数组和数字数组的形式获取行,因此您可以获得两种类型。如果只需要关联数组,请将sqlsrv_fetch_array 的第二个参数设置为SQLSRV_FETCH_ASSOC

    $result = sqlsrv_query( $conn, 'select * from table1');
    $array = array();
    while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
    {
        $array[]=$row;
    }
    echo json_encode(array("data"=>array_values($array)));
    

    删除了第一次提取,因为如果这样做,您将不会获得第一行。

    参考:http://php.net/manual/en/function.sqlsrv-fetch-array.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2016-08-31
      • 1970-01-01
      相关资源
      最近更新 更多