一、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函数的使用,以及一些基础的错误处理姿势。