php序列化和json数据的⽐较
【序列化的概念】
序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
将对象的状态信息转换为可以存储或传输的窗体的过程。在序列化期间,对象将其当前状态写⼊到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
通常,对象实例的所有字段都会被序列化,这意味着数据会被表⽰为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,⽽不依赖于该成员的可访问性。类似地,反序列化从序列化的表⽰形式中提取数据,并直接设置对象状态,这也与可访问性规则⽆关。对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试⽣成特定字段来保存不可序列化的重要数据。如果⽆法实现这⼀点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。
【JSON的概念】
JSON,JavaScript Object Notation,⼀种更轻、更友好的⽤于接⼝(AJAX、REST等)数据交换的格式。
JSON是结构化数据串⾏化的⽂本格式,作为XML的⼀种替代品,⽤于表⽰客户端与服务器间数据交换有效负载的格式。它是从ECMAScript语⾔标准衍⽣⽽来的。JSON的设计⽬标是使它成为⼩的、轻便的、⽂本的,⽽且是JavaScript的⼀个⼦集。
【长度的⽐较】
如下⼀段代码,显⽰了对数组和对象编码后⽣成的字符串及其长度
class Foo
public$int=1;
public$bool=TRUE;
public$array=1,2=>'test','string';
public function test$flag
$flag,'test function for Foo <br />';
public function output$str
$str,'<br />';
public function compare_serialize_and_json$data
$serialize_str=$data;
self::'序列化后的值:'.$serialize_str."; length=".
$serialize_str;
$json_str= json_encode$data;
self::'JSON后的值:'.$json_str."; length=".$json_str;
$test_data='wwww'=>0,'phppan'=>1,'com'=>2;
//序列化数组
'数组:<br />';
Foo::$test_data;
$foo=new Foo;
'对象:<br />';
Foo::$foo;
输出:
数组:
序列化后的值:a:3:s:4:"wwww";i:0;s:6:"phppan";i:1;s:3:"com";i:2;; length=52
JSON后的值:"wwww":0,"phppan":1,"com":2; length=29
对象:
序列化后的值:O:3:"Foo":3:s:3:"int";i:1;s:4:"bool";b:1;s:5:"array";a:3:i:0;
a:1:i:0;i:1;i:2;s:4:"test";i:3;s:6:"string";; length=111
JSON后的值:"int":1,"bool":true,"array":"0":1,"2":"test","3":"string"; length=63
很明显的长度区别,serialize在编码后⼤概是json的两倍。
原因:
serialize后字符串包含了⼦串的长度,这可能是速度⽅⾯的优化,典型的空间换时间,但是它本⾝还是太重了。
serialize有更加详细的类型区分,⽽json只有四种类型,并且是以简单的符号表⽰。
【速度的⽐较】
以代码说明问题,如下⽐较速度的代码:
$max_index=10;
"memory_limit","512M";
$array=0,1000000,1,9999;
'serialize:<br />';
$start= xdebug_time_index;
for$i=0;$i<$max_index;$i++
$str=$array;
$end= xdebug_time_index;
$end-$start,'<br />';
'json:<br />';
$start= xdebug_time_index;
for$i=0;$i<$max_index;$i++
$str= json_encode$array;
$end= xdebug_time_index;
$end-$start,'<br />';
$array,$str;
输出:
serialize:
9.5371007919312
json:
1.4313209056854
serialize的速度在⼤数据量的情况下⽐json差了快⼀个数量级。
从上⾯两点看,json不管是在速度还是在⽣成的字符串的⼤⼩上都⽐serialize要好,那为什么serialize还要存在呢?原因在下⾯这个点:实现的功能。
【处理对象】
phpjson格式化输出如下代码:
"Content-type:text/html;charset=utf8";
class Foo
public function test$flag
$flag,'test function for Foo <br />';
$foo=new Foo;
'反序列化测试:<br />';
$foo->1;
$serialize_str=$foo;
$obj=$serialize_str;
$obj->2;
$foo->1;
$json_str= json_encode$foo;
$obj= json_decode$json_str;
$obj->2;
;
输出:
反序列化测试:
1test function for Foo
2test function for Foo
1test function for Foo
! Fatal error: Call to undefined method stdClass::
json⽆法处理对象⽅法等数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。