He pasado un par de horas mirando varias respuestas similares antes de publicar mi problema.PHP: no se puede codificar json con varias filas
Estoy recuperando datos de una tabla en mi base de datos, y quiero codificarlos en un JSON. Sin embargo, el resultado de json_encode() solo es válido cuando la tabla tiene una sola fila. Si hay más de una fila, la prueba en http://jsonlint.com/ devuelve un error.
Esta es mi consulta:
$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);
}
que me pone el siguiente 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."
}
}
Cuando ejecuto la prueba en http://jsonlint.com/, devuelve este error:
Parse error on line 29:
..."No comment" }}{ "data": {
---------------------^
Expecting 'EOF', '}', ',', ']'
Sin embargo, si solo uso esta primera mitad de JSON ...
{
"data":
{
"entry_id":"2",
"entry_type":"Information Relevant to the Subject",
"entry":"This is my second entry."
}
}
... o si sólo probar la segunda mitad ...
{
"data":{
"entry_id":"1",
"entry_type":"My Opinion About What Happened",
"entry":"This is my first entry."
}
}
... la misma prueba volverá "Válido JSON".
Lo que quiero es poder generar en un solo JSON [válido] cada fila en la tabla.
Cualquier sugerencia será muy apreciada.
¡Muchas gracias! Toda la solución funciona, y la suya proporciona la explicación más completa. No solo esto es correcto, sino que ignoro por completo que los otros ejemplos colocan la función json_encode fuera del ciclo while. Me disculpo por no darme cuenta, y gracias por su tiempo. – asraelarcangel