(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 символ, возможно, некорректно закодирован
JSON_ERROR_NON_BACKED_ENUMЗначение содержит нетипизированное перечисление, которое невозможно сериализовать
| Версия | Описание |
|---|---|
| 8.1.0 |
Добавили константу JSON_ERROR_NON_BACKED_ENUM.
|
Пример #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)