PHP的serialize序列化数据以及JSON格式化数据分析


Posted in PHP onOctober 10, 2015

PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式,而JSON则是一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。 其实两者都是以一种字符串的方式来体现一种数据结构。那么他们之间又有什么区别呢?
serialize序列化
我们在一些老的WEB系统中可能会看到在数据库或在文本文件中存储着一大串貌似有着特殊含义的字符串文本内容。我们仔细看会发现它具有数据类型和结构等信息,但是它并不容易人工阅读,它只适合PHP程序读取。PHP的serialize将数组进行了序列化并存储。我们假设有这样一个数组:

$arr = array( 
  "0" => array( 
    "gameName" => "德乙", 
    "homeName" => "比勒费尔德", 
    "guestName" => "不伦瑞克", 
    "endTime" => "2015-08-21" 
  ), 
  "1" => array( 
    "gameName" => "英超", 
    "homeName" => "水晶宫", 
    "guestName" => "阿斯顿维拉", 
    "endTime" => "2015-08-22" 
  ) 
);

我们要将这个数组内容存储在数据库或者文本文件中,以便其他地方读取。

$serialize = serialize($arr); 
echo $serialize;

我们使用PHP的serialize将数组进行序列化,输出以下结果:

a:2:{i:0;a:4:{s:8:"gameName";s:6:"德乙";s:8:"homeName";s:15:"比勒费尔德";s:9:"guestName";s:12:"不伦瑞克";s:7:"endTime";s:10:"2015-08-21";}i:1;a:4:{s:8:"gameName";s:6:"英超";s:8:"homeName";s:9:"水晶宫";s:9:"guestName";s:15:"阿斯顿维拉";s:7:"endTime";s:10:"2015-08-22";}}

以上输出的结果看上去比较复杂,其实也很简单,它说明的就是一些数据类型和结构。
a:2说明这是个有两个元素的数组(array);
i:0指序列索引;
a:4指有4个字段
s:8:"gameName"说明这是有8个字符的字符串(string)
实际开发中我们只将序列化后的数据进行存储,并不要去关心存储的格式和以及字段意思。如果要将序列化后的数据恢复成数组,则使用unserialize()函数即可。

print_r(unserialize($serialize));

以上代码可以打印出数组。
JSON数据解析
我们知道,PHP操作JSON可以使用json_encode()和json_decode()两个函数。json_encode()可以将数组转换成json格式的文本数据,它方便存储和读取,而json_decode()可以直接将json数据转换成数组,方便调用。

$jsonencode = json_encode($arr); 
echo $jsonencode;

输出:

[{"gameName":"\u5fb7\u4e59","homeName":"\u6bd4\u52d2\u8d39\u5c14\u5fb7","guestName":"\u4e0d\u4f26\u745e\u514b","endTime":"2015-08-21"},{"gameName":"\u82f1\u8d85","homeName":"\u6c34\u6676\u5bab","guestName":"\u963f\u65af\u987f\u7ef4\u62c9","endTime":"2015-08-22"}]

很显然,使用JSON后,数据空间要比serialize少,输出的结果中中文字符串经过编码,仔细看是键值对应,便于人工识别,而且关键是JSON格式的数据方便其他语种读取并识别,所以有人说它是XML替代品。JSON格式的数据能和WEB前端JS完成异步交互过程。如果要将json还原成数组,可以使用json_decode()函数。
print_r(json_decode($jsonencode,true));
关于JSON的应用有兴趣的同学可以参考本站文章:PHP中JSON的应用
总结
PHP的serialize将数组序列化后是便于存储,而JSON格式的数据不仅便于存储还能跟其他语言如javascript读取。它们在性能上可能会有细微区别,如果前后端交互使用比较多的话建议使用JSON,结合PHP、Javascript、JSON以及Ajax就可以完成强大的数据交互功能。

关于PHP的serialize序列化数据以及JSON格式化数据详细分析就这么多,如果想了解更多的内容请继续关注。

PHP 相关文章推荐
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
必须收藏的php实用代码片段
Feb 02 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 #PHP
php中删除、清空session的方式总结
Oct 09 #PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 #PHP
PHP中Closure类的使用方法及详解
Oct 09 #PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 #PHP
PHP程序员不应该忽略的3点
Oct 09 #PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
Oct 09 #PHP
You might like
PHP 面向对象 final类与final方法
2010/05/05 PHP
php中文验证码实现方法
2015/06/18 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python开发之thread线程基础实例入门
2015/11/11 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
super关键字的用法
2012/04/10 面试题
高分子材料与工程专业推荐信
2013/12/01 职场文书
党员的自我评价范文
2014/01/02 职场文书
公司授权委托书范本
2014/04/03 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL