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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
php中文验证码实现示例分享
Jan 12 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PHP chunk_split()函数讲解
Feb 12 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在线代理转向代码
2012/05/05 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
js中call与apply的用法小结
2013/12/28 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python简单分割文件的方法
2015/07/30 Python
pandas值替换方法
2018/07/10 Python
详解python while 函数及while和for的区别
2018/09/07 Python
python write无法写入文件的解决方法
2019/01/23 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
质检部部长职责
2013/12/16 职场文书
经济管理专业自荐信
2013/12/30 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
家长写给孩子的评语
2014/04/18 职场文书
护理专业自荐书
2014/06/04 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
Elasticsearch 聚合查询和排序
2022/04/19 Python