json基于javascript programming language, standard ecma-262 3rd edition - december 1999的一个子集。json采用完全独立于语言的文本格式,但是也使用了类似于c语言家族的习惯(包括c, c++, c#, java, javascript, perl, python等)。这些特性使json成为理想的数据交换语言。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式,
说起来两者都是以一种字符串的方式来体现一种数据结构,那它们之间有什么区别呢。
立即学习“PHP免费学习笔记(深入)”;
先从JSON说起,看一个简单的实例。
例一:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=keyword><STRONG><FONT color=#006699>var</FONT></STRONG></SPAN><SPAN> test = {</SPAN><SPAN class=string><FONT color=#0000ff>"Name"</FONT></SPAN><SPAN>:</SPAN><SPAN class=string><FONT color=#0000ff>"Peter"</FONT></SPAN><SPAN>,</SPAN><SPAN class=string><FONT color=#0000ff>"Age"</FONT></SPAN><SPAN>:20}; </SPAN></SPAN><LI><SPAN>document.write(test.Name + </SPAN><SPAN class=string><FONT color=#0000ff>": "</FONT></SPAN><SPAN> + test.Age); </SPAN></SPAN></LI></OL>显示结果:
Peter: 20
变量test中{"Name":"Peter","Age":20}为一个有2个元素的对象(感觉就像PHP的数组):
Name为Peter,Age为20。
当然也可以变得复杂些。
例二:
<OL class=dp-xml><LI class=alt><SPAN><SPAN>var </SPAN><SPAN class=attribute><FONT color=#ff0000>test</FONT></SPAN><SPAN> = {"User":{"Name":"Peter","Age":20},"Company":"FORD"}; </SPAN></SPAN><LI><SPAN>document.write(test.User.Name + ": " + test.Company); </SPAN></LI></OL>显示结果:
Peter: FORD这个例子中User元素中包含了Name和Age。
如果要体现多个User,则需要使用数组,区别于对象的"{}",数组使用"[]"。
JSON解析例三:
<OL class=dp-xml><LI class=alt><SPAN><SPAN>var </SPAN><SPAN class=attribute><FONT color=#ff0000>test</FONT></SPAN><SPAN> = [ </SPAN></SPAN><LI><SPAN> {"User":{"Name":"Peter","Age":20},"Company":"FORD"}, </SPAN><LI class=alt><SPAN> {"User":{"Name":"Li Ming","Age":20},"Company":"Benz"} </SPAN><LI><SPAN> ]; </SPAN><LI class=alt><SPAN>document.write(test[1].User.Name + ": " + test[1].Company); </SPAN><LI><SPAN>//或者使用:document.write(test[1]["User"]["Name"] + ": " + test[1]["Company"]); </SPAN></LI></OL>JSON解析显示结果:
Li Ming: Benz
通过以上简单实例就能将一些复杂数据通过一个字符串来进行传递,再配合上Ajax的确是方便很多。
下面再来看看PHP的serialize函数的作用。
JSON解析例四:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
<OL class=dp-xml><LI class=alt><SPAN><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>arr</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>array</FONT></SPAN><SPAN> </SPAN></SPAN><LI><SPAN> ( </SPAN><LI class=alt><SPAN> 'Peter'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN> array </SPAN></SPAN><LI><SPAN> ( </SPAN><LI class=alt><SPAN> 'Country'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>'USA', </SPAN></SPAN><LI><SPAN> 'Age'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>20 </SPAN></SPAN><LI class=alt><SPAN> ), </SPAN><LI><SPAN> 'Li Ming'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN> array </SPAN></SPAN><LI class=alt><SPAN> ( </SPAN><LI><SPAN> 'Country'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>'CHINA', </SPAN></SPAN><LI class=alt><SPAN> 'Age'=</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>21 </SPAN></SPAN><LI><SPAN> ) </SPAN><LI class=alt><SPAN> ); </SPAN><LI><SPAN> </SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute-value><FONT color=#0000ff>serialize</FONT></SPAN><SPAN class=attribute><FONT color=#ff0000>serialize_var</FONT></SPAN><SPAN> = serialize($arr); </SPAN></SPAN><LI><SPAN>echo $serialize_var; </SPAN></LI></OL>
JSON解析显示结果:
<OL class=dp-xml><LI class=alt><SPAN><SPAN>a:2:{s:5:"Peter";a:2:{s:7:"Country";s:3:"USA";s:3:"Age";i:20;}s:7:"Li Ming";a:2:{s:7:"Country";s:5:"CHINA";s:3:"Age";i:21;}} </SPAN></SPAN></LI></OL>这个结果看上去比JSON要复杂一些,其实也很简单,它说明的就是一些数据类型和结构。
以a:2:{s:7:"Country";s:3:"USA";s:3:"Age";i:20;}为例:
a:2说明这是个有两个元素的数组(array),s:7:"Country";s:3:"USA";为第一个元素,s:7说明这是有7个字符的字符串(string),后面i:20;也应该猜得到是整数(integer)20。
再来看一下这个例子,
例五:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=keyword><STRONG><FONT color=#006699>class</FONT></STRONG></SPAN><SPAN> test </SPAN></SPAN><LI><SPAN>{ </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>var</FONT></STRONG></SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN> = 0; </SPAN></SPAN><LI><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>function</FONT></STRONG></SPAN><SPAN> add(){ </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=func>echo</SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN>+10; </SPAN></SPAN><LI><SPAN> } </SPAN><LI class=alt><SPAN>} </SPAN><LI><SPAN> </SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$unserialize_var</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>new</FONT></STRONG></SPAN><SPAN> test; </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$serialize_var</FONT></SPAN><SPAN> = serialize(</SPAN><SPAN class=vars><FONT color=#dd0000>$unserialize_var</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=func>echo</SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$serialize_var</FONT></SPAN><SPAN>; </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$unserialize_var</FONT></SPAN><SPAN> = null; </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$unserialize_var</FONT></SPAN><SPAN> = unserialize(</SPAN><SPAN class=vars><FONT color=#dd0000>$serialize_var</FONT></SPAN><SPAN>); </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$unserialize_var</FONT></SPAN><SPAN>->add(); </SPAN></SPAN></LI></OL>显示结果:
O:4:"test":1:{s:3:"var";i:0;}
10
从这个例子中可以看出来,serialize对数据的类型和结构都进行的保存,
unserialize后的变量仍然可以使用add()方法。
那么PHP和JSON有没有联系呢,熟悉PHP的朋友应该了解PHP5.2.0已经将JSON extension设置为默认组件,也就是说我们可以在PHP中进行JSON操作,其函数为json_encode和json_decode。
例六:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=vars><FONT color=#dd0000>$arr</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>array</FONT></STRONG></SPAN><SPAN> </SPAN></SPAN><LI><SPAN> ( </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=string><FONT color=#0000ff>'Name'</FONT></SPAN><SPAN>=></SPAN><SPAN class=string><FONT color=#0000ff>'Peter'</FONT></SPAN><SPAN>, </SPAN></SPAN><LI><SPAN> </SPAN><SPAN class=string><FONT color=#0000ff>'Age'</FONT></SPAN><SPAN>=>20 </SPAN></SPAN><LI class=alt><SPAN> ); </SPAN><LI><SPAN> </SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$jsonencode</FONT></SPAN><SPAN> = json_encode(</SPAN><SPAN class=vars><FONT color=#dd0000>$arr</FONT></SPAN><SPAN>); </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=func>echo</SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$jsonencode</FONT></SPAN><SPAN>; </SPAN></SPAN></LI></OL>
显示结果:
{"Name":"Peter","Age":20}
这个结果和例一中test值是一样的,通过json_encode将PHP中的变量转换为JSON字符出表达式。
再来看看json_decode的用法。
例七:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN> = </SPAN><SPAN class=string><FONT color=#0000ff>'{"Name":"Peter","Age":20}'</FONT></SPAN><SPAN>; </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$jsondecode</FONT></SPAN><SPAN> = json_decode(</SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN>print_r(</SPAN><SPAN class=vars><FONT color=#dd0000>$jsondecode</FONT></SPAN><SPAN>); </SPAN></SPAN></LI></OL>显示结果:
<OL class=dp-c><LI class=alt><SPAN><SPAN>stdClass Object ( [Name] => Peter [Age] => 20 ) </SPAN></SPAN></LI></OL>
这的确验证了,在JSON中{"Name":"Peter","Age":20}是一个对象,但是在PHP中也可以将其转为数组,在json_decode中将ASSOC参数设置为True即可。
例八:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN> = </SPAN><SPAN class=string><FONT color=#0000ff>'{"Name":"Peter","Age":20}'</FONT></SPAN><SPAN>; </SPAN></SPAN><LI><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$jsondecode</FONT></SPAN><SPAN> = json_decode(</SPAN><SPAN class=vars><FONT color=#dd0000>$var</FONT></SPAN><SPAN>,true); </SPAN></SPAN><LI class=alt><SPAN>print_r(</SPAN><SPAN class=vars><FONT color=#dd0000>$jsondecode</FONT></SPAN><SPAN>); </SPAN></SPAN></LI></OL>显示结果:
<OL class=dp-c><LI class=alt><SPAN><SPAN>Array ( [Name] => Peter [Age] => 20 ) </SPAN></SPAN></LI></OL>
另,需要注意的是JSON是基于Unicode格式,所以要进行中文操作要将其转化为UTF-8格式。通过上面这些例子相信大家对于JSON和PHP的serialize、json_encode都有了初步了解,结合PHP、Javascript、JSON以及Ajax就可以完成强大的数据交互功能。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号