实例详解PHP serialize与JSON解析_PHP教程

php中文网
发布: 2016-07-15 13:26:16
原创
1028人浏览过

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解析例四:

PHP 网络编程技术与实例(曹衍龙)
PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

PHP 网络编程技术与实例(曹衍龙) 386
查看详情 PHP 网络编程技术与实例(曹衍龙)
<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就可以完成强大的数据交互功能。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446610.htmlTechArticleJSON基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于...
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号