кодировать json с помощью php?

Я хочу получить json с функцией кодирования php, как показано ниже.

<?php require "../classes/database.php"; $database = new database(); header("content-type: application/json"); $result = $database->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 "]}"; 

Я хочу, чтобы выход json был чем-то вроде этого

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

но выход json выглядит следующим образом

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

Поскольку вы понимаете, что в конце есть запятая, я хочу удалить ее, чтобы она могла быть правильным синтаксисом json, если бы я удалил echo ","; когда есть более одного результата, json будет генерировать как это {"results":[{"id":1,"name":"name1"}{"id":2,"name":"name2"}]} и этот синтаксис неверен

Надеюсь, что все получили то, что я имею в виду здесь, любые идеи будут оценены

Related of "кодировать json с помощью php?"

Если бы я был вами, я бы не json_encode каждого отдельного массива, а объединил массивы вместе, а затем json_encode объединенный массив в конце. Ниже приведен пример использования синтаксиса коротких массивов 5.4 :

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

Сделайте json_encoding как шаг LAST. Создайте свою структуру данных исключительно на PHP, а затем закодируйте эту структуру в конце. Выполнение промежуточных кодировок означает, что вы в основном создаете свою собственную строку json, которая всегда будет сложной и, скорее всего, «сломана».

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

сначала создайте его в массив, затем запишите все за один раз:

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

Вот решение, с которым я пришел

  $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 

Это поместит json в массив, а затем развяжет его с помощью glue (,), выводящего следующие {"results":[{"id":1,"name":"maadi"},{"id":2,"name":"monofiya"}]} без необходимости делать массив сначала, а затем передать его функции json_encode ()

Просто измените эти строки

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

К этим

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