Json_decode 解析json字符串为NULL的解决方法(必看)

在使用 json_decode() 函数将 JSON 字符串解析为 PHP 变量时,如果出现 JSON 字符串为 NULL 的情况,解析后也会返回 NULL,这时无法正确获取 JSON 中的数据。

Json_decode 解析json字符串为NULL的解决方法(必看)

问题描述

在使用 json_decode() 函数将 JSON 字符串解析为 PHP 变量时,如果出现 JSON 字符串为 NULL 的情况,解析后也会返回 NULL,这时无法正确获取 JSON 中的数据。

解决方法

为了解决此问题,可以使用 json_last_error() 函数获取解析 JSON 字符串时的错误码,并进一步判断出错的原因,然后才能解决问题。

以下是示例代码:

$json = 'null';
$data = json_decode($json);

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 'JSON 字符串语法错误';
            break;
        case JSON_ERROR_UTF8:
            echo 'JSON 字符串编码错误';
            break;
        default:
            echo '未知的 JSON 解析错误';
            break;
    }
} else {
    var_dump($data);
}

在上面的示例中,如果 $json 为 NULL,即空字符串,解析时会得到 $data 为 NULL 的结果,此时 json_last_error() 函数会返回 JSON_ERROR_SYNTAX 错误码,说明 JSON 字符串语法错误。

示例说明

示例一

以下是一段示例 JSON 字符串:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}

对该 JSON 字符串使用 json_decode() 解析:

$json = '{"name":"John","age":30,"city":"New York"}';
$data = json_decode($json);

var_dump($data);

会得到以下输出结果:

object(stdClass)#1 (3) {
    ["name"] => string(4) "John"
    ["age"] => int(30)
    ["city"] => string(8) "New York"
}

这是因为该 JSON 字符串符合标准格式,所以能正确解析得到对象(stdClass类型)。

示例二

以下是一段示例 JSON 字符串:

null

对该 JSON 字符串使用 json_decode() 解析:

$json = 'null';
$data = json_decode($json);

var_dump($data);

会得到以下输出结果:

NULL

这是因为该 JSON 字符串实际上是一个空的对象,所以解析为 NULL 的结果是正确的。

总结

通过使用 json_last_error() 函数可以获得 JSON 解析的错误码,进而判断出错的原因,从而帮助我们解决 JSON 字符串解析为 NULL 的问题。

本文标题为:Json_decode 解析json字符串为NULL的解决方法(必看)

基础教程推荐