2016-05-27 93 views
0

我顯然是過度處理從我的查詢返回的行,但我並不真正瞭解PHP資源和行數和數組。對PHP的回聲生成嵌套json

這是我的數據庫調用:

$result=mysql_query($query); 
if(mysql_num_rows($result)>0){ 
    header('Content-type: application/json'); 
    $rows = array(); 
    while($r = mysql_fetch_assoc($result)){ 
     $rows[] = array($r); 
    } 
    echo json_encode($rows);    
}; 

這就是我在我的JavaScript取回:

Object {data: Array[23], status: 200, config: Object, statusText: "OK"} 
    data: Array[23] 
     0:Array[1] <-- superfluous 
      0: Object 
       Name: "foo" 
       Order: "0" 
       uID: "1" 
     1:Array[1] <-- superfluous 
      0: Object 
       Name: "bar" 
       Order: "1" 
       uID: "2" 
     ... 

在有有一個多餘的陣列層。它應該是這樣的:

Object {data: Array[23], status: 200, config: Object, statusText: "OK"} 
    data: Array[23] 
     0:Object 
      Name: "foo" 
      Order: "0" 
      uID: "1" 
     1: Object 
      Name: "bar" 
      Order: "1" 
      uID: "2" 
     ... 

我很想刪除行=陣列(),但我不知道怎麼辦。我不知道如何正確地將我的數據庫行轉換爲數組。

+0

$行[] =(數組)$ R; –

+2

問題出在'$ rows [] = array($ r);'make this like'$ rows [] = $ r' –

+3

請[停止使用'mysql_ *'函數](http://stackoverflow.com/問題/ 12859942 /爲什麼 - 不應該,我使用MySQL的函數功能於PHP)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

回答

0

的正確

$rows[] = $r; 

然後在JavaScript中使用JSON.parse首先

JSON.parse(str); 
+0

謝謝。第一個修復工作。我不確定第二個修復程序的用途。 $ http調用當然期待並接收JSON作爲響應。我的意思是......它沒有修復就行。 – DaveC426913

1

的問題是在$rows[] = array($r);

稍作改動做到這一點,如:$rows[] = $r,我之後想一想,你會得到的數組不是對象。您可以使用額外的JSON_FORCE_OBJECT對數組進行編碼,以便您的數組創建對象json。

實施例後

正常json_encode

Object {data: Array[23], status: 200, config: Object, statusText: "OK"} 
    data: Array[23] 
     0:Array[3] 
      Name: "foo" 
      Order: "0" 
      uID: "1" 
     1: Array[3] 
      Name: "bar" 
      Order: "1" 
      uID: "2" 
     ...