在发布问题之前,我已经花了几个小时仔细研究了几个类似的答案。
我正在从数据库中的表中检索数据,我想将其编码为JSON。但是,仅当表只有一行时,json_encode()的输出才有效。如果有多个行,则http://jsonlint.com/上的测试将返回错误。
这是我的查询:
$result = mysql_query($query); $rows = array(); //retrieve and print every record while($r = mysql_fetch_assoc($result)){ $rows['data'] = $r; //echo result as json echo json_encode($rows); }
这使我得到以下JSON:
{ "data": { "entry_id":"2", "entry_type":"Information Relevant to the Subject", "entry":"This is my second entry." } } { "data":{ "entry_id":"1", "entry_type":"My Opinion About What Happened", "entry":"This is my first entry." } }
当我在http://jsonlint.com/上运行测试时,它返回此错误:
Parse error on line 29: ..."No comment" }}{ "data": { ---------------------^ Expecting 'EOF', '}', ',', ']'
但是,如果我仅使用JSON的前半部分…
{ "data": { "entry_id":"2", "entry_type":"Information Relevant to the Subject", "entry":"This is my second entry." } }
…或者如果我只测试下半部分…
{ "data":{ "entry_id":"1", "entry_type":"My Opinion About What Happened", "entry":"This is my first entry." } }
…同一测试将返回“有效JSON”。
我想要的是能够在表的每一行中以单个[有效] JSON输出。
任何建议将不胜感激。
问题是您要为每行吐出单独的JSON,而不是一次完成所有操作。
$result = mysql_query($query); $rows = array(); //retrieve and print every record while($r = mysql_fetch_assoc($result)){ // $rows[] = $r; has the same effect, without the superfluous data attribute $rows[] = array('data' => $r); } // now all the rows have been fetched, it can be encoded echo json_encode($rows);
我所做的较小更改是将数据库的每一行作为新值存储在$rows数组中。这意味着完成后,$rows数组将包含查询中的 所有 行,因此一旦完成,您就可以获得正确的结果。
$rows
解决方案的问题在于,您正在为数据库的一行回显有效的JSON,但json_encode()不知道其他所有行,因此,您将获得一系列单独的JSON对象,而不是包含一个单独的JSON对象。数组。
json_encode()