dat*_*.io 46 php serialization json
所以我需要在PHP中对数组进行编码并将其以纯文本形式存储在MySQL数据库中,我的问题是我应该使用serialize()还是json_encode()?每个人的优点和缺点是什么?
我认为他们中的任何一个都会在这种情况下做.但是你更喜欢哪一个?为什么?如果它不是数组的东西?
Pas*_*TIN 49
主要优点serialize:它特定于PHP,这意味着它可以表示PHP类型,包括您自己的类的实例 - 当您反序列化数据时,您将获得对象,仍然是类的实例.
主要优点json_encode:JSON不是特定于PHP:有多个库可以用多种语言读/写它 - 这意味着如果你想要一些可以用 PHP之外的其他语言操作的东西会更好.
手工读取/写入/修改JSON字符串比序列化字符串更容易.
另一方面,由于JSON不是特定于PHP的,因此它不知道特定于PHP的东西 - 比如数据类型.
作为几个旁注:
where子句中使用数据,也无法在没有PHP干预的情况下更新它...Sho*_*san 11
我在PHP中对Json编码与序列化进行了一些分析.我发现Json最适合像数组这样简单明了的数据.
请访问https://www.shozab.com/php-serialization-vs-json-encoding-for-an-array/查看我的实验结果
json_encode超过的另一个优点serialize是尺寸.我注意到,当我试图弄清楚为什么我们memcache使用的内存变得如此之大,并且试图找到减少的方法是:
<?php
$myarray = array();
$myarray["a"]="b";
$serialize=serialize($myarray);
$json=json_encode($myarray);
$serialize_size=strlen($serialize);
$json_size=strlen($json);
var_dump($serialize);
var_dump($json);
echo "Size of serialized array: $serialize_size\n";
echo "Size of json encoded array: $json_size\n";
echo "Serialize is " . round(($serialize_size-$json_size)/$serialize_size*100) . "% bigger\n";
Run Code Online (Sandbox Code Playgroud)
哪个给你:
string(22) "a:1:{s:1:"a";s:1:"b";}"
string(9) "{"a":"b"}"
Size of serialized array: 22
Size of json encoded array: 9
Serialize is 59% bigger
Run Code Online (Sandbox Code Playgroud)
显然我采用了最极端的例子,因为数组越短,序列化的开销就越重要(相对于初始对象大小,由于格式化,无论内容有多小,都会产生最少数量的字符).仍然从生产网站我看到序列化数组比他们的json等价物大20%.
首先,序列化数组或对象并将其存储在数据库中通常是代码味道.有时人们最终将逗号分隔列表放入列中,然后当他们发现需要查询时遇到各种麻烦.
因此,如果出现这种情况,请仔细考虑.
至于差异.PHP序列化可能更紧凑,但只能与PHP一起使用.JSON是跨平台的,编码和解码速度可能较慢(尽管我有点怀疑).
| 归档时间: |
|
| 查看次数: |
37668 次 |
| 最近记录: |