serialize
的一个非常重要的事情是,它保留了正确序列化对象类型的信息。https://wordpress.stackexchange.com/a/61094/91844 - Arnis Juraga正如评论所指出的那样,JSON占用的空间比序列化数组少。我还检查了JSON或序列化哪个更快,令人惊讶的是,JSON编码比序列化更快。不过,反序列化比JSON解码更快。
这是我用来测试的脚本:
<?php
function runTime(){
$mtime = microtime();
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
return $mtime;
}
?>
<pre>
<?php
$start = runTime();
$ser;
for($i=0; $i<1000; $i++){
$a = array(a => 1, x => 10);
$ser = serialize($a);
}
$total = runTime() - $start;
echo "Serializing 1000 times took \t$total seconds";
?>
<?php
$start = runTime();
$json;
for($i=0; $i<1000; $i++){
$a = array(a => 1, x => 10);
$json = json_encode($a);
}
$total = runTime() - $start;
echo "JSON encoding 1000 times took \t$total seconds";
?>
<?php
$start = runTime();
$ser;
for($i=0; $i<1000; $i++){
$a = unserialize($ser);
}
$total = runTime() - $start;
echo "Unserializing 1000 times took \t$total seconds";
?>
<?php
$start = runTime();
$json;
for($i=0; $i<1000; $i++){
$a = json_decode($json);
}
$total = runTime() - $start;
echo "JSON decoding 1000 times took \t$total seconds";
?>
</pre>
可移植性:JSON 获胜。 JSON 支持更多平台,而 PHP 反序列化只被 PHP 支持(据我所知)。虽然任何语言都可以解析这两种格式,但是 JSON 有更多预构建的库。
未来性:JSON 获胜。JSON 是一种“标准”,就像 JavaScript 是一种标准一样,并且不太可能在未来发生变化。PHP 组没有对序列化格式的未来做出承诺,虽然未来不太可能发生变化,但一个组控制该格式意味着您可能会遇到未来无法读取的数据。
保真度:PHP 获胜。 PHP 序列化允许您使用本机 PHP 数据类型存储数据,包括自定义类定义的对象。 JSON 仅允许您存储通用基元类型、通用列表(“数组”)和键/值对对象。如果您正在开发 PHP 应用程序,则 PHP 序列化在此方面可能提供一些优势。
文件大小:JSON 在这里稍微获胜,因为 PHP 的当前序列化格式比较冗长(因为它存储了更多信息)。
性能:谁知道,这取决于具体情况,请进行性能分析。
结论:除非您有强烈的理由使用 PHP 序列化,否则请使用 JSON。
JSON更具可移植性,即可以更轻松地从不同的语言中读取/写入它等。如果您使用PHP序列化数组,则只能轻松地使用PHP来访问它。
对于数组和与Javascript或其他语言的通信,请使用json。对于对象或任何内部PHP工作,用serialize处理当前运行的脚本。
如果您想在JSON.stringify(obj)中避免引号和特殊字符,可以使用PHP的数据库特定转义方法。
<?php
mysql_real_escape_string(htmlspecialchars($value))
?>
正如大多数答案所指出的那样,JSON比序列化更胜一筹。我认为最大的优点是它的平台无关性。您可能有其他应用程序与您的数据库通信,它们可能与PHP毫不相干。
但是两种解决方案都违反了数据库规范化。您的数据库甚至不在第一范式中,因此您无法利用任何数据库功能,例如搜索。更好的方法是使用对象关系映射。有很好的库可用 - 例如考虑使用Doctrine ORM。