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 23 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php实现httpclient类示例
Apr 08 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
laravel配置Redis多个库的实现方法
Apr 10 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
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
降低PHP Redis内存占用
2017/03/23 PHP
JavaScript静态的动态
2006/09/18 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
js简易版购物车功能
2017/06/17 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
多版本Python共存的配置方法
2017/05/22 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
python实现抽奖小程序
2020/04/15 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
司机的工作范围及职责
2013/11/13 职场文书
人民教师求职自荐信
2014/03/12 职场文书
党员教师工作决心书
2014/03/13 职场文书
技术员岗位职责
2015/02/04 职场文书
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python