json_last_error

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

json_last_errorВозвращает код последней ошибки

Описание

json_last_error(): int

Функция возвращает код последней ошибки, которая возникла во время кодирования, декодирования или проверки JSON-данных без установки флага JSON_THROW_ON_ERROR.

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Функция возвращает целочисленное значение в виде следующих констант:

Коды ошибок JSON
Константа Значение Доступность
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)

Смотрите также

  • json_last_error_msg() - Возвращает строку с сообщением об ошибке последнего вызова функции json_validate(), json_encode() или json_decode()
  • json_decode() - Декодирует строку JSON
  • json_encode() - Возвращает JSON-представление данных