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
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
PHP加密解密字符串汇总
Apr 26 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
8种常用的Python工具
2020/08/05 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
函授本科自我鉴定
2013/11/03 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
艾滋病宣传标语
2014/06/25 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
亲情作文之母爱
2019/09/25 职场文书
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers