您的位置:

探究phpjson_decode的各个方面

一、json_decode的简介

json_decode是php函数库中一个非常常用的函数,它可以将符合json格式的字符串转换成php的对象或者数组。

json是一种轻量级的数据交换格式,以其速度快、易读、易解析等优点广泛应用于前后端的数据传输中。而json_decode函数提供了一种简便有效的方法将json字符串转换为php对象或数组,从而方便php处理json数据。

$jsonStr = '{"name":"小明","age":20}';
$obj = json_decode($jsonStr); //将json字符串转换成php对象
$arr = json_decode($jsonStr,true); //将json字符串转换成php数组

上述示例演示了如何将json字符串转换成php对象或数组,并且可以根据需要选择将转换的对象是数组还是对象。

二、json_decode的参数解析

json_decode函数提供了两个参数,分别为待转换的json字符串和一个bool类型的参数$assoc。当$assoc为true时,将返回php关联数组,否则返回php对象。

如果不需要转换成关联数组,可以使用默认情况下的false,将json字符串转换成php对象。如果需要转换成数组,将第二个参数设置为true即可。

$jsonStr = '{"name":"小明","age":20,"scores":[98,86,75]}';
$obj = json_decode($jsonStr);
$arr = json_decode($jsonStr,true);
echo $obj->name; //"小明"
echo $arr['scores'][0]; //98

三、json_decode的返回值解析

json_decode的返回值有三种情况,分别是成功返回对象或数组、失败返回null、部分失败返回之前成功的部分对象或数组。

当json_decode函数成功转换后,返回值为既定格式的对象或数组。如果json字符串错误,返回null。如果在解析过程中部分错误,则可以使用json_last_error函数获取上一个json解析过程中的错误信息。

$jsonStr1 = '{"name":"小明","age":20}';
$obj1 = json_decode($jsonStr1);
var_dump($obj1); // object(stdClass)#1 (2) { ["name"]=> string(6) "小明" ["age"]=> int(20) }

$jsonStr2 = '{"name":"小明","age":}';
$obj2 = json_decode($jsonStr2);
var_dump($obj2); // NULL

$jsonStr3 = '{"name":"小明","age":20,"scores":[98,86,75}';
$obj3 = json_decode($jsonStr3);
var_dump($obj3); // object(stdClass)#3 (2) { ["name"]=> string(6) "小明" ["age"]=> int(20) }
echo json_last_error(); // 4 (意味着json解析字符串不合法)

四、json_decode的扩展

在实际应用中,json_decode函数有时候不能直接满足我们的需求,因此我们需要用到一些扩展的功能,这里介绍json_decode的两个比较常用的扩展。

1、json_decode返回指定类型

json_decode函数默认返回的是php对象或数组,如果需要返回其他类型,可以自定义一个decodeJson函数,并在其中设置返回值类型。

function decodeJson($jsonStr,$toarray=false){
    if($toarray) {
        $result = json_decode($jsonStr,true);
    }else {
        $result = json_decode($jsonStr);
    }

    if($result === null && json_last_error()!==JSON_ERROR_NONE) {
        throw new \Exception("Failed to parse JSON: ".json_last_error_msg());
    }
    return $result;
}

$obj = decodeJson('{"name":"小明","age":20}'); //返回php对象
$arr = decodeJson('{"name":"小明","age":20,"scores":[98,86,75]}',true); //返回php数组

2、处理json_decode转换失败的情况

在实际应用中,json字符串可能并不总是符合格式要求,因此需要对json_decode函数进行一定的封装,防止json字符串格式错误导致的服务中断。

function tryDecodeJson($jsonStr,$default=null){
    if(is_string($jsonStr)){
        try{
            $result = json_decode($jsonStr,true);
            if(json_last_error()==JSON_ERROR_NONE) {
                return $result;
            }
        }catch(\Exception $e){
            return $default;
        }
    }
    return $default;
}

$obj = tryDecodeJson('{"name":"小明","age":20}'); //返回php对象或null
$arr = tryDecodeJson('{"name":"小明","age":20,"scores":[98,86,75x]}',[]); //返回php数组或默认值[]

五、小结

json_decode函数是php中一个非常重要常用的函数,可以帮助我们将符合特定格式的字符串转化成php的对象或数组。在实际应用中,我们可能会根据需求进行调整,扩展json_decode的功能,如返回指定类型的对象或数组,或者对json_decode解析失败进行处理等。我们通过本篇文章的学习,也深入了解了json_decode函数的使用,以及一些基础的错误处理姿势。