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 Mysql编程之高级技巧
Aug 27 PHP
数据库查询记录php 多行多列显示
Aug 15 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
php 实现进制相互转换
Apr 07 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 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系统命令函数使用分析
2013/07/05 PHP
php使用curl访问https示例分享
2014/01/17 PHP
php验证码生成器
2017/05/24 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
Python下Fabric的简单部署方法
2015/07/14 Python
快速查询Python文档方法分享
2017/12/27 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
苹果台湾官网:Apple台湾
2019/01/05 全球购物
四种会话跟踪技术
2015/05/20 面试题
优秀应届生推荐信
2013/11/09 职场文书
医科大学生的自我评价
2013/12/04 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
销售团队获奖感言
2014/08/14 职场文书
村委会贫困证明范文
2014/09/21 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2015公司年度工作总结
2015/05/14 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
Python竟然能剪辑视频
2021/05/25 Python
python区块链实现简版工作量证明
2022/05/25 Python