json_last_error() 是 php 中用于获取最近一次 json 操作错误码的函数,需在 json_encode() 或 json_decode() 后立即调用,返回整数错误码,常配合 json_last_error_msg() 使用以获取可读错误信息。

json_last_error() 是 PHP 中用来检查最近一次 JSON 操作(json_encode、json_decode 或 json_validate)是否出错的函数。它不主动触发错误,而是在操作之后调用,获取上一次操作留下的错误码。
关键点就一个:必须在 json_encode() 或 json_decode() 之后立即使用,且不能被中间其他 JSON 函数覆盖。
什么时候该用 json_last_error()
-
json_encode()返回false时,想知道具体哪类问题(比如中文乱码?递归引用?) -
json_decode()返回null时,需要区分是「空 JSON 字符串」还是「语法错误」 - 你没加
JSON_THROW_ON_ERROR(推荐加),就得靠它查错
注意:如果用了 JSON_THROW_ON_ERROR,出错会直接抛异常,`json_last_error()` 就不会被更新,此时不该依赖它。
怎么正确调用
- 它没有参数,直接写
json_last_error() - 返回整数,对应预定义常量(如
JSON_ERROR_SYNTAX) - 建议搭配
json_last_error_msg()一起用,读起来更直观
典型写法:
用于端到端视频本地化流程的轻量编排器,路由至四个专注子技能——/wjs-transcribing-audio、/wjs-translating-subtitles...
- 先执行 `json_encode($data)` 或 `json_decode($json)`
- 紧接着调用 `json_last_error()` 判断是否为 `JSON_ERROR_NONE`
- 如果不是,再用 `json_last_error_msg()` 看具体提示
示例:
$data = ['name' => '张三', 'bio' => "身高:175cm\n体重:68kg"];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($json === false) {
$error_code = json_last_error();
$error_msg = json_last_error_msg();
echo "编码失败({$error_code}):{$error_msg}";
}
常见错误码及含义
以下是高频错误,对照排查最实用:
- JSON_ERROR_SYNTAX:JSON 字符串格式不对(比如多逗号、单引号当双引号、括号不匹配)
- JSON_ERROR_UTF8:输入字符串含非法 UTF-8 字节(常见于 GBK 编码未转 UTF-8)
- JSON_ERROR_DEPTH:嵌套太深(默认上限 512 层),或数组/对象循环引用
- JSON_ERROR_RECURSION:要编码的数据里有对象/数组互相引用
- JSON_ERROR_INF_OR_NAN:数据里有 `INF`、`NAN` 这类浮点特殊值
- JSON_ERROR_UNSUPPORTED_TYPE:传了资源(resource)、闭包(Closure)等无法序列化的类型
小技巧:自动补全错误信息
如果你用的是 PHP
function safe_json_last_error_msg() {
$code = json_last_error();
$msgs = [
JSON_ERROR_NONE => 'No error',
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters',
JSON_ERROR_RECURSION => 'One or more recursive references',
JSON_ERROR_INF_OR_NAN => 'INF and NAN cannot be JSON encoded',
JSON_ERROR_UNSUPPORTED_TYPE => 'Type is not supported',
];
return $msgs[$code] ?? 'Unknown error';
}
这样就能在老环境里也拿到可读提示。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










