codificar json usando php?

Quiero obtener json con función de encoding php como la siguiente

get_by_name($_POST['q']); //$_POST['searchValue'] echo '{"results":['; if($result) { $i = 1; while($row = mysql_fetch_array($result)) { if(count($row) > 1) { echo json_encode(array('id'=>$i, 'name' => $row['name'])); echo ","; } else { echo json_encode(array('id'=>$i, 'name' => $row['name'])); } $i++; } } else { $value = "FALSE"; echo json_encode(array('id'=>1, 'name' => "")); // output the json code } echo "]}"; 

Quiero que la salida json sea algo así.

 {"results":[{"id":1,"name":"name1"},{"id":2,"name":"name2"}]} 

Pero la salida de JSON es parecida a la siguiente.

 {"results":[{"id":1,"name":"name1"},{"id":2,"name":"name2"},]} 

Como te das cuenta de que hay una coma al final, quiero eliminarla para que pueda ser la syntax json correcta, si eliminé el echo ","; cuando haya más de un resultado, el json generará así {"results":[{"id":1,"name":"name1"}{"id":2,"name":"name2"}]} y esa syntax es incorrecta también

Espero que todos tengan lo que quiero decir aquí, cualquier idea sería apreciada.

Si fuera usted, no json_encode cada matriz individual, sino que fusionaría las matrices juntas y luego json_encode la matriz fusionada al final. A continuación se muestra un ejemplo utilizando la syntax de matriz corta de 5.4 :

 $out = []; while(...) { $out[] = [ 'id' => $i, 'name' => $row['name'] ]; } echo json_encode($out); 

Haz la encoding json como el último paso. Construye tu estructura de datos únicamente en PHP, luego codifica esa estructura al final. Hacer codificaciones intermedias significa que básicamente estás construyendo tu propia cadena json, lo que siempre va a ser complicado y muy probablemente “roto”.

 $data = array(); while ($row = mysql_fetch_array($result)) { $data[] = array('id'=>$i, 'name' => $row['name']); } echo json_encode($data); 

primero compile todo en una matriz, luego codifica todo de una vez:

 $outputdata = array(); while($row = mysql_fetch_array($result)) { $outputdata[] = $row; } echo json_encode($outputdata); 

Aquí hay una solución que vine con

  $i = 1; $array = array(); while($row = mysql_fetch_array($result)) { $array[] = json_encode(array('id'=>$i, 'name' => $row['name'])); $i++; } echo implode(',', $array); // Take output array glue it with the 

Esto colocará el json en una matriz y luego lo implosionará con pegamento (,) dando como resultado los siguientes {"results":[{"id":1,"name":"maadi"},{"id":2,"name":"monofiya"}]} sin la necesidad de hacer la matriz primero y luego pasarla a la función json_encode ()

Solo cambia las lineas

 echo json_encode(array('id'=>$i, 'name' => $row['name'])); echo ","; 

A estos

 echo ","; echo json_encode(array('id'=>$i, 'name' => $row['name']));