json_encode не работает с массивами - PullRequest
0 голосов
/ 30 апреля 2018

Я использую MySQL для хранения списка элементов в базе данных, и я пытаюсь извлечь все элементы из одной таблицы. Часть соединения работает нормально, и получение элементов, кажется, работает хорошо, но я не могу json_encode список элементов.

  // Executes SQL query on the database specified by $con
  $sql = "SELECT * FROM productlist";
  $query = mysqli_query($con, $sql) or die(nl2br("\n Failed to execute query"));

  // Retrieves all the rows returned by the SQL query
  $rows = array();
  while($r = mysqli_fetch_assoc($query)) {
      $rows[] = $r;
  }

  echo json_encode($rows[0]); // test whether retrieval works

  // Displays rows in content-type JSON and in PRETTY_PRINT
  header('Content-Type: application/json');
  echo json_encode($rows, JSON_PRETTY_PRINT);

Вот код. json_encode из rows[0] работает хорошо. Однако, когда я комментирую это и пытаюсь сделать то же самое с rows, он просто ничего не возвращает.

Он даже не возвращает ошибку, он работает хорошо, просто функция json_encode вообще ничего не возвращает, когда я пытаюсь сделать это с rows.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Вы не можете вывести что-либо до установки заголовка. Если вы не используете выходной буфер (ob_ функции):

ob_start();
echo json_encode($rows[0]);
header('Content-Type: application/json');
echo json_encode($rows, JSON_PRETTY_PRINT);
ob_end_flush();

Или вы можете изменить порядок в вашем скрипте:

header('Content-Type: application/json');
echo json_encode($rows[0]);
echo json_encode($rows, JSON_PRETTY_PRINT);

Последняя опция может привести к ошибке синтаксического анализа JSON, поскольку вы выводите здесь два «объекта».

Ошибка json_last_error , о которой вы упомянули, относится к кодировке UTF-8. Вы можете попробовать utf8 кодировать и декодировать ваш JSON.

json_encode($rows, JSON_UNESCAPED_UNICODE);
json_decode($json, false, 512, JSON_UNESCAPED_UNICODE);

Если это не решит проблему, вы можете проверить, все ли в кодировке UTF-8 .

0 голосов
/ 30 апреля 2018

Ответ на этот вопрос в случае, если бедная душа с подобной проблемой найдет это. Прежде всего, print_r и json_last_error оказались безумно полезными для понимания проблемы.

Прежде всего, проверьте значение, которое возвращает json_last_error(), и сравните его с списком ошибок здесь . Если возвращается число 5, попробуйте проверить значения массива с помощью функции print_r. Если вы видите какие-то странные символы, вероятно, база данных имеет неправильную кодировку.

В моем случае изменение некоторых столбцов с latin на utf-8 устранило проблему.

0 голосов
/ 30 апреля 2018

Попробуйте это:

<code>echo "<pre>";
print_r(json_encode($rows, JSON_PRETTY_PRINT));
echo "
";
...