2011-08-16 106 views
0

我想呼應PHP JSON字符串時,我確認在JSONlint JSON字符串提示錯誤從MySQL數據庫的Bt檢索數據:JSON編碼不給了正確的JSON字符串

Parse error on line 4: 
...placesname": "abc"}{ "0": "abc", 
----------------------^ 
Expecting 'EOF', '}', ',', ']' 

而且我的PHP代碼是:

$query = mysql_query("SELECT placesname FROM Places;"); 

while ($row = mysql_fetch_array($query)){ 
    echo json_encode($row); 
} 
+1

請出示完整的JSON字符串和'的print_r()'的'$ row' –

回答

0

試試這個..

$query = mysql_query("SELECT placesname FROM Places;"); 
$data = array(); 
while ($row = mysql_fetch_array($query)){ 
    $data[]=$row['placesname']; 
} 

echo json_encode($data); 
3

您將所有行一起追加到一個字符串中。您需要製作一行數組,然後json_encode該數組。

你喜歡這個創建JSON:

{"key": "value", "key2": "value2"}{"key": "value", "key2": "value2"}{"key": "value", "key2": "value2"} 

這不是有效的JSON。它需要像這樣:

[ 
    {"key": "value", "key2": "value2"}, 
    {"key": "value", "key2": "value2"}, 
    {"key": "value", "key2": "value2"} 
] 

這是什麼,你會得到,如果你json_encode對象的數組。

我不是一個PHP專家,但嘗試一些沿着這些路線:

$query = mysql_query("SELECT placesname FROM Places;"); 

$rows = Array(); 
while ($row = mysql_fetch_array($query)){ 
    $rows[] = $row; 
} 

echo json_encode($rows); 
+0

@IphoneBites:例如,沒有逗號,因爲你不在行之間輸出逗號,'json_encode'只能編碼你給它的東西。你需要在你的循環之前輸出一個'['',在每一行之後輸出''',然後在循環之後輸出']'。 (您可能希望在最後一行之後禁止尾隨逗號,它在JSON中有效,但這並不意味着所有JSON解析器都能正確使用,特別是那些依賴於'eval'並且在IE上運行的解析器。) –

+0

@ T.J。 Crowder - 實際上,尾隨的逗號*不是*有效的JSON:http://stackoverflow.com/questions/201782/can-you-use-a-trailing-comma-in-a-json-object/201784#201784 (雖然它*是*有效的JavaScript) – Skilldrick

+0

'@Skilldrick:'我真的很震驚,但是通過[Section 15.12.1](http://es5.github.com/#x15)中的語法.12.1),[json.org](http://json.org)給出的模糊概述要透徹得多,我不得不同意 - 它不是*有效的JSON。它應該是,但顯然不是。 *嘆息* –