(PHP 5 >= 5.3.0, PHP 7, PHP 8)
json_last_error — Возвращает код последней ошибки
Функция возвращает код последней ошибки,
которая возникла во время кодирования, декодирования или проверки JSON-данных
без установки флага JSON_THROW_ON_ERROR.
Сигнатура функции не содержит параметров.
Функция возвращает целочисленное значение в виде следующих констант:
| Константа | Значение | Доступность |
|---|---|---|
JSON_ERROR_NONE |
Без ошибок | |
JSON_ERROR_DEPTH |
Достигнута максимальная глубина стека | |
JSON_ERROR_STATE_MISMATCH |
Недопустимые или сформированные с нарушением формата JSON данные | |
JSON_ERROR_CTRL_CHAR |
Ошибка управляющего символа, возможно, неверная кодировка | |
JSON_ERROR_SYNTAX |
Синтаксическая ошибка | |
JSON_ERROR_UTF8 |
Некорректные для кодировки UTF-8 символы, возможно, неверная кодировка | |
JSON_ERROR_RECURSION |
Одна или несколько зацикленных ссылок в кодируемом значении | |
JSON_ERROR_INF_OR_NAN |
Одно или несколько значений
NAN
или INF
в кодируемом значении
|
|
JSON_ERROR_UNSUPPORTED_TYPE |
Передали значение с неподдерживаемым типом | |
JSON_ERROR_INVALID_PROPERTY_NAME |
Название свойства невозможно закодировать | |
JSON_ERROR_UTF16 |
Некорректный для кодировки UTF-16 символ, возможно, некорректно закодирован |
Пример #1 Пример получения кода последней ошибки функцией json_last_error()
<?php
// Допустимая json-строка
$json[] = '{"Организация": "Команда PHP-документации"}';
// Недопустимая json-строка, которая вызовет синтаксическую ошибку,
// поскольку вместо двойных кавычек указали одинарные
$json[] = "{'Организация': 'Команда PHP-документации'}";
foreach ($json as $string) {
echo 'Декодируем: ' . $string;
json_decode($string);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' — Без ошибок';
break;
case JSON_ERROR_DEPTH:
echo ' — Достигнута максимальная глубина стека';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' — Некорректные разряды или несоответствие режимов';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' — Некорректный управляющий символ';
break;
case JSON_ERROR_SYNTAX:
echo ' — Синтаксическая ошибка, некорректный формат JSON';
break;
case JSON_ERROR_UTF8:
echo ' — Некорректные символы для кодировки UTF-8, возможно, строку неправильно закодировали';
break;
default:
echo ' — Неизвестная ошибка';
break;
}
echo PHP_EOL;
}
?>Результат выполнения приведённого примера:
Декодируем: {"Организация": "Команда PHP-документации"} — Без ошибок
Декодируем: {'Организация': 'Команда PHP-документации'} — Синтаксическая ошибка, некорректный формат JSON
Пример #2 Пример получения функцией json_last_error() кода последней ошибки, которую сгенерировала функция json_encode()
<?php
// Недопустимая для кодировки UTF-8 последовательность символов
$text = "\xB1\x31";
$json = json_encode($text);
$error = json_last_error();
var_dump($json, $error === JSON_ERROR_UTF8);
?>Результат выполнения приведённого примера:
string(4) "null" bool(true)
Пример #3
Пример получения кода последней ошибки функцией json_last_error()
при обработке JSON-данных с флагом JSON_THROW_ON_ERROR
<?php
// Недопустимая для кодировки UTF-8 последовательность символов, которая вызывает ошибку JSON_ERROR_UTF8
json_encode("\xB1\x31");
// Следующий вызов не генерирует ошибку при кодировании данных в формат JSON
json_encode('okay', JSON_THROW_ON_ERROR);
// Второй вызов функции json_encode() не изменил глобальное состояние ошибки,
// которую сгенерировал первый вызов
var_dump(json_last_error() === JSON_ERROR_UTF8);
?>Результат выполнения приведённого примера:
bool(true)