使用PHP判断json解析是否失败
json_last_error
$list = json_decode($value, true);
if (json_last_error() !== JSON_ERROR_NONE) {
// JSON解析错误
$list = ['解析错误'];
}
在PHP中,将字符串转换为数组是很常规的操作,但是有一些字符串会因为不完整而导致解析错误。这时候就可以使用json_last_error进行判断了。
json_last_error()
是 PHP 中的一个函数,用于返回最后一次 JSON 编码或解码操作时发生的错误代码。
基本语法
json_last_error(): int
返回值
该函数返回一个整数错误代码,不同的错误代码对应不同的错误类型,常见的错误代码及含义如下:
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 字符,可能是编码问题。
使用示例
<?php
// 一个无效的 JSON 字符串
$invalidJson = '{name: "John", age: 30}';
// 尝试解码
$decoded = json_decode($invalidJson);
// 检查是否有错误
if (json_last_error() !== JSON_ERROR_NONE) {
switch (json_last_error()) {
case JSON_ERROR_DEPTH:
echo '达到了最大堆栈深度';
break;
case JSON_ERROR_STATE_MISMATCH:
echo '无效或异常的 JSON';
break;
case JSON_ERROR_CTRL_CHAR:
echo '控制字符错误,可能是编码不对';
break;
case JSON_ERROR_SYNTAX:
echo '语法错误';
break;
case JSON_ERROR_UTF8:
echo '畸形的 UTF-8 字符,可能是编码问题';
break;
default:
echo '未知错误';
}
} else {
print_r($decoded);
}
?>
json_last_error() !== JSON_ERROR_NONE:
这句很实用!只要不是JSON_ERROR_NONE,那么一定是检测错误!
示例解析:
$invalidJson
是一个无效的 JSON 字符串,因为键名没有用双引号包裹。当使用json_decode()
对其进行解码时,会发生错误,然后通过json_last_error()
来检查错误类型,并输出相应的错误信息。