json_last_error

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

json_last_error返回最后发生的错误

说明

json_last_error(): int

没有指定 JSON_THROW_ON_ERROR时,返回上一次 JSON 编码解码时发生的最后一个错误(如果有)。

参数

此函数没有参数。

返回值

返回一个整型(integer),这个值会是以下的常量之一:

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_RECURSIONOne or more recursive references in the value to be encoded 
JSON_ERROR_INF_OR_NAN One or more NAN or INF values in the value to be encoded  
JSON_ERROR_UNSUPPORTED_TYPE指定的类型,值无法编码。 
JSON_ERROR_INVALID_PROPERTY_NAME指定的属性名无法编码。 
JSON_ERROR_UTF16畸形的 UTF-16 字符,可能因为字符编码不正确。 

示例

示例 #1 json_last_error() 例子

<?php
// 一个有效的 json 字符串
$json[] = '{"Organization": "PHP Documentation Team"}';

// 一个无效的 json 字符串会导致一个语法错误,在这个例子里我们使用 ' 代替了 " 作为引号
$json[] = "{'Organization': 'PHP Documentation Team'}";


foreach (
$json as $string) {
echo
'Decoding: ' . $string;
json_decode($string);

switch (
json_last_error()) {
case
JSON_ERROR_NONE:
echo
' - No errors';
break;
case
JSON_ERROR_DEPTH:
echo
' - Maximum stack depth exceeded';
break;
case
JSON_ERROR_STATE_MISMATCH:
echo
' - Underflow or the modes mismatch';
break;
case
JSON_ERROR_CTRL_CHAR:
echo
' - Unexpected control character found';
break;
case
JSON_ERROR_SYNTAX:
echo
' - Syntax error, malformed JSON';
break;
case
JSON_ERROR_UTF8:
echo
' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo
' - Unknown error';
break;
}

echo
PHP_EOL;
}
?>

以上示例会输出:

Decoding: {"Organization": "PHP Documentation Team"} - No errors Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON

示例 #2 json_encode()json_last_error()

<?php
// 无效的 UTF8 序列
$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_THROW_ON_ERROR

<?php
// 导致 JSON_ERROR_UTF8 的无效 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)

参见

To Top