美工统筹SEO,为企业电子商务营销助力!
在PHP说话中利用JSON和将json复原成数组的体例
一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-27 10:44:09 阅读数: 135
在之前我写过php前往json数据简略实例,方才上彀,俄然发明一篇文章,也是先容json的,还挺详细,值得参考。内容以下
从5.2版本起头,PHP原生供给json_encode()和json_decode()函数,前者用于编码,后者用于解码。
一、json_encode()
<?php $arr = array ("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5); echo json_encode($arr); ?>
输入
{"a":1,"b":2,"c":3,"d":4,"e":5}
再看一个工具转换的例子:
$obj->body = "another post"; $obj->id = 21; $obj->approved = true; $obj->favorite_count = 1; $obj->status = NULL; echo json_encode($obj);
输入
{ "body":"another post", "id":21, "approved":true, "favorite_count":1, "status":null }
因为json只接管utf-8编码的字符,以是json_encode()的参数必须是utf-8编码,不然会取得空字符或null。傍边文利用GB2312编码,或外文利用ISO-8859-1编码的时辰,这一点要出格注重。
二、索引数组和接洽关系数组
PHP撑持两种数组,一种是只保管"值"(value)的索引数组(indexed array),别的一种是保管"名值对"(name/value)的接洽关系数组(associative array)。
因为javascript不撑持接洽关系数组,以是json_encode()只将索引数组(indexed array)转为数组格局,而将接洽关系数组(associative array)转为工具格局。
比方,此刻有一个索引数组
$arr = Array("one", "two", "three"); echo json_encode($arr);
输入
["one","two","three"]
若是将它改成接洽关系数组:
$arr = Array("1"=>"one", "2"=>"two", "3"=>"three"); echo json_encode($arr);
输入变为
{"1":"one","2":"two","3":"three"}
注重,数据格局从"[]"(数组)变成了"{}"(工具)。
若是你须要将"索引数组"强迫转化成"工具",能够如许写
json_encode( (object)$arr );
或
json_encode ( $arr, JSON_FORCE_OBJECT );
三、类(class)的转换
上面是一个PHP的类:
class Foo { const ERROR_CODE = "404"; public $public_ex = "this is public"; private $private_ex = "this is private!"; protected $protected_ex = "this should be protected"; public function getErrorCode() { return self::ERROR_CODE; } }
此刻,对这个类的实例停止json转换:
$foo = new Foo; $foo_json = json_encode($foo); echo $foo_json;
输入成果是
{"public_ex":"this is public"}
能够看到,除公然变量(public),其余工具(常量、公有变量、体例等等)都丢失了。
四、json_decode()
该函数用于将json文本转换为响应的PHP数据布局。上面是一个例子:
$json = "{"foo": 12345}"; $obj = json_decode($json); print $obj->{"foo"}; // 12345
凡是环境下,json_decode()老是前往一个PHP工具,而不是数组。比方:
$json = "{"a":1,"b":2,"c":3,"d":4,"e":5}"; var_dump(json_decode($json));
成果便是天生一个PHP工具:
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
若是想要强迫天生PHP接洽关系数组,json_decode()须要加一个参数true:
$json = "{"a":1,"b":2,"c":3,"d":4,"e":5}"; var_dump(json_decode($json,true));
成果就天生了一个接洽关系数组:
array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
五、json_decode()的罕见毛病
上面三种json写法都是错的,你能看犯错在那里吗?
$bad_json = "{ "bar": "baz" }"; $bad_json = "{ bar: "baz" }"; $bad_json = "{ "bar": "baz", }";
对这三个字符串履行json_decode()都将前往null,并且报错。
第一个的毛病是,json的分开符(delimiter)只许可利用双引号,不能利用单引号。第二个的毛病是,json名值对的"名"(冒号左侧的局部),任何环境下都必须利用双引号。第三个的毛病是,最初一个值以后不能增加逗号(trailing comma)。
别的,json只能用来表现工具(object)和数组(array),若是对一个字符串或数值利用json_decode(),将会前往null。
var_dump(json_decode("Hello World")); //null
以上这篇在PHP说话中利用JSON和将json复原成数组的体例便是小编分享给大师的全数内容了,但愿能给大师一个参考,也但愿大师多多撑持网页设想。