为什么WordPress选择数据序列化而不是json_encode?

时间:2015-04-07 作者:Mayeenul Islam

在我加入WordPress的小时候,我看到WordPress本身及其友好的插件都在使用PHPserialize() 在许多情况下,将数据存储到db中。但在最近的一次搜索中,我发现社区对json_encode() 超过serialize().

和我亲自测试了一个关联数组,它显示了:

  • serialize() 存储342个字符json_encode() 存储285个字符,为什么我要问这个我正在进行一个项目,同时我要将重复的元字段存储到帖子中。其中:

    数据基本上是英文的,但有时也可以是孟加拉语,数据是关联数组,有3层深(我希望我能正确理解水平):

    • array(
          1 => array(
              \'key\'=>\'value\',
              \'key2\'=>\'value\'
          ),
          2 => array(
              \'key\'=>\'value\',
              \'key2\'=>\'value\'
          )
      )
      
      我已经检查了postmeta 表的meta_value field这是一个longtext, that means 长度为4294967295个字符(4GB)。

      所以我需要一个强大的存储解决方案。

3 个回复
最合适的回答,由SO网友:Ramy Deeb 整理而成

我认为,并不能百分之百确定这是WP开发人员采用这种方法的真正原因,但常识告诉我,serialize保留了变量类型,并有一个小型的内置错误检测,json只存储字符串值{ key : value }, 因此,当您回到PHP时,您必须猜测其格式,或者为其创建解析器。这将迫使您有两种不同的方法来处理数据:前一种方法是将数据存储为json,而在解码json后,它将作为一个完全不同的对象返回。

这是大小不同的主要原因,PHP存储的不仅仅是一个数组;它存储序列化时数组中的元素数量、类型和值。

您不仅在数据库中存储键值对,还可能存储具有不同变量类型的对象。

SO网友:gmazzap

JSON编码是在PHP 5.2中引入的,WordPress要老得多,它是为PHP 4而生(设计的)。

数据序列化在WordPress中非常普遍,因此从PHP序列化到JSON编码将意味着一个巨大的向后兼容性问题,如果我对WordPress了解一点,这将永远不会发生。

也就是说,如果您认为JSON编码比PHP序列化更适合您,那么就使用它。

如果您将字符串(即数据的JSON编码版本)传递给post元函数,WordPress将不会触及它,但您需要记住在检索时对数据进行JSON解码。

如果DB存储大小对你来说非常重要,那么它可能值得额外的工作,否则就让WordPress使用它所使用的东西,而不在乎它。

也许,您可以评估是否使用自定义表来保存数据。

SO网友:s_ha_dum

我很想以“取决于意见”来结束这篇文章,但我认为这个问题有几个很好的答案。我将选择“历史”。

(1)json_encode 在PHP核心中相对较新。

json\\U编码

(PHP 5>=5.2.0,PECL json>=1.2.0)json\\u encode-返回值的json表示形式

http://php.net/manual/en/function.json-encode.php

json_encode 在WordPress早期是不可靠的。它只在5.2中被集成到“核心”PHP中,尽管在那之前很久它就作为PECL扩展提供了。

其次,如果您馈送对象,例如WP_Query 对象到json_encode 你得到一个stdClass 对象打开json_decode. serialize/unserialize 将保留对象。

结束

相关推荐

How many databases do I need?

我被要求为其他人建立另一个网站。最终,我会把它交给他们。我将在本地开发它,然后现场使用,然后移交完全控制权。同时,我需要一个数据库供WP使用。我是将新网站连接到我个人网站已有的现有数据库中,还是每个网站都有一个数据库?我不想把我的数据库和别人的数据库一起导出。