2016-04-01 3 views
1

Also hier der Sache:Encoding json mit php

Ich entwickle ein Backend (PHP), die mit Microsoft SQL Server mit Android-Anwendung verbindet die Benutzeroberfläche sein.

Allerdings habe ich ein Problem, wenn es darum geht, JSON mit PHP zu kodieren.

Es ist mehr als fair zu sagen, dass ich ein Anfänger in PHP bin.

Dies ist mein Code:

$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))); 

Also eigentlich die Tabelle hat nichts so weit: nur zwei Attribute: Name und Alter

Das Problem hierbei ist, dass die Rückkehr zu sein, ist wie folgt:

{"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}]} 

Vor den Werten steht immer eine Zahl mit einem Wert, dann der echte Schlüssel und ein Wert.

Zum Beispiel:

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

Vielen Dank für alle, die diese Besuche würden.

** checkte ich diese Links: Decode json With PHP not working Parsing JSON with PHP Encoding JSON with PHP issues with array **

+1

Wie wäre es nur 'Echo json_encode ($ array);'? Oder wenn du den Schlüssel von 'data' brauchst: echo json_encode (array ("data" => $ array); ' – Stuart

Antwort

1

Der Standardholetyp sqlsrv_fetch_array ist SQLSRV_FETCH_BOTH, der die Zeilen als assoziative und numerische Array abruft, so dass Sie beide Typen erhalten. Wenn Sie nur ein assoziatives Array wünschen, setzen Sie das zweite Argument sqlsrv_fetch_array auf 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))); 

Entfernt den ersten Abruf, weil Sie die erste Zeile nicht erhalten, wenn Sie das tun.

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

+0

Vielen Dank –

2

Sie müssen den Abruftyp angeben:

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

standardmäßig Sie sowohl die numerischen als auch die assoziativen Schlüssel erhalten .

Und Sie sollten wahrscheinlich den Abruf vor der Schleife entfernen, da Sie die erste Zeile in Ihren aktuellen Ergebnissen nicht erhalten werden.