2011-08-16 71 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。它应该是,但显然不是。 *叹息* –