之前没有留意过这两个函数,昨天群里有人问起。发现如下事情。
header("Content-type:text/html;charset=utf-8"); $arr = array('a'=>1,'b'=>2); $str = json_encode($arr); var_dump($str); var_dump(json_encode($str)); $str_1 = json_encode($str); var_dump($str_1); $arr_1 = json_decode($str_1); var_dump($arr_1); $obj = json_decode($arr_1); var_dump($obj); echo $obj->a;
结果:
string '{"a":1,"b":2}' (length=13) string '"{"a":1,"b":2}"' (length=19) string '"{"a":1,"b":2}"' (length=19) string '{"a":1,"b":2}' (length=13) object(stdClass)[1] public 'a' => int 1 public 'b' => int 2 1
用json_encode() 二次或者N次 将会把之前转好的json字符串进行转义。
来看下json_encode()的api
string json_encode ( mixed $value
[, int $options
= 0 ] )
这说第一个参数是混合类型的,除了resource 其余都可以。 后面参数。不想偏离主题。
因为第一次调用json_encode()的时候传的是数组,第二次调用json_encode()方法的时候参数是字符串。
用json_decode();
mixed json_decode ( string $json
[, bool $assoc
= false [, int $depth
= 512 [, int $options
= 0 ]]] )
api说只能放json字符串。
但是我们进行第二次json_decode 的时候传入的参数,其实是一个数组了。返回给我们了一个对象。