@9StarRu

Как правильно вывести json результат?

Из базы получаю 10 записей.
На основе этих записей, пытаюсь создать правильный Json вывод, вот мой код:

function printItems($items)
{
foreach ($items as $item) {

  $test = array('id' => ''.$item['item_id'].'', 'title' => ''.htmlspecialchars($item['title']).'');

  echo json_encode(array($test));

  }
  
}
?>

<?php 
header("Content-type: application/json; charset=utf-8");
/* something... */
printItems($db->select(buildQuery(1)));
?>


В результате,
printItems($db->select(buildQuery(1)));


выдает Json не валидный, пример выполнения:

[{"id":"1","title":"test"}][{"id":"2","title":"test"}][{"id":"3","title":"test"}][{"id":"4","title":"test"}]


Присутствуют лишние ][ и нет запятых между },{

Вот так должно быть:

[{"id":"1","title":"test"},{"id":"2","title":"test"},{"id":"3","title":"test"},{"id":"4","title":"test"}]


Пожалуйста, помогите решить задачу, вывести Json в нужном формате.
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
@DanKud
Так вы выводите JSON в каждой итерации цикла. Вам нужно создать общий массив со всеми данными и уже после добавления в него всех данных привести его в JSON:
function printItems($items)
{
    $arr = [];
    foreach ($items as $item) {
        $arr[] = array('id' => ''.$item['item_id'].'', 'title' => ''.htmlspecialchars($item['title']).'');
    }
    return json_encode($arr);
}
.....
echo printItems($db->select(buildQuery(1)));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@prostoprofan
function printItems($items)
{
$test = array();

foreach ($items as $item) {

  $test += array('id' => ''.$item['item_id'].'', 'title' => ''.htmlspecialchars($item['title']).'');



  }
  return json_encode(array($test));
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы