Я хочу получить 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"}]}
и этот синтаксис неверен
Надеюсь, что все получили то, что я имею в виду здесь, любые идеи будут оценены
Если бы я был вами, я бы не 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']));