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 相关文章推荐
source.php查看源文件
Dec 09 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
php输入数据统一类实例
Feb 23 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
php探针不显示内存解决方法
Sep 17 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
js确定对象类型方法
2012/03/30 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
python处理写入数据代码讲解
2020/10/22 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
儿子婚宴答谢词
2014/01/09 职场文书
工程售后服务承诺书
2014/05/21 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
医学专业大学生求职信
2014/07/12 职场文书
撤诉状格式范本
2015/05/19 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python
MySQL数据库 安全管理
2022/05/06 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL