php后端使用(json_decode和json_encode)
(1)json_decode
作用在于将字符串格式的json数据解析成php的object,然后print_r可以打印出来。
<?php
$m="{
'a':11,
'b':22
}";
$n=json_decode($m);
print_r($n);
?>
但如果要访问解析后的json数据,处理形式还是跟js不太一样的:
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
js直接$obj["foo-bar"]就可以。
但是一定要注意,这里所说的json数据,格式非常严格,key必须带双引号(单引号都不行),否则这些方法无效。在js里可能key不需要带引号都ok,但那并不是真正意义上的json,那只是js里的对象的写法而已,所以面对其它语言,json就只能严格按照自己的规范走,key必须带双引号。所以:
<?php
$json='{ name:"xx","age":30}';
$re=json_decode($json); //这里json_decode方法就会失去效用,转换不了json。
echo $re->{"age"};
?>
<?php
$json="{ 'name':"xx",'age':30}";
$re=json_decode($json); //因为单引号,同样失效。
echo $re->{"age"};
?>
注:一般前端JSON_stringfy处理json数据让其变成字符串后再丢给后端处理,后端则用json_decode来解析。
(2)json_encode
将php的数组转换成string类型的json数据。
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo gettype(json_encode($arr)); //string
?>
转成json后,'a'就变成了"a",还是一样,json必须严格的带双引号。
注:后端json_encode将数组变成string类型的json数据后,再丢给前端,前端再JSON_parse成object然后使用。