【问题标题】:Why use CJSON encode when we have json_encode为什么在我们有 json_encode 时使用 CJSON 编码
【发布时间】:2013-06-25 20:10:19
【问题描述】:

我正在使用 Yii 为网站构建 API。我知道有一个名为 CJson 的实用程序类,并有一个名为 encode 的函数。

据我所知,可以在原生 json_encode 函数中自定义其他参数,例如 JSON_NUMERIC_CHECK,这非常有用。它创造了

{
    "id": 17
}

而不是 Yii 的 CJSON 编码,它使 '17' 成为一个字符串。

{
    "id": "17"
}

所以我的问题是我是否有任何理由应该使用 CJSON 编码而不是内置的 PHP 函数 json_encode ?

【问题讨论】:

  • 非常好的问题,先生。

标签: php json yii


【解决方案1】:

除了@kuldeep.kamboj,我应该说CJSON::encode 会将17 视为一个整数,如果你定义这样的值的data type

// PHP
$toBeConverted = array('id' => (int) 17); // or (int) $myInteger

$jsonString = \CJSON::encode($toBeConverted);    

// $jsonString will be:
{
    "id": 17
}

【讨论】:

    【解决方案2】:

    我意识到这是一个老话题,但想补充另一个原因。

    通过像 CJSON 这样的辅助类进行所有 JSON 编码,您可以覆盖默认行为。例如you can use it to add a token to prevent JSON hijacking

    【讨论】:

      【解决方案3】:

      这个问题很老了。我正在使用 Yii 1.4、PHP 5.4。

      我发现的区别是“json_encode”仅编码类属性,而“CJSON::encode”仅使用 @property 注释对类文档中列出的属性进行编码...至少对于 CActiveRecord 是这样

      【讨论】:

        【解决方案4】:

        只有我能想到的最低 php 版本支持。

        Yii 支持 php 5.1 作为最低版本参见 Yii Installation Page 。而 json_encode/json_decode 在 php 5.2 中引入。所以这可能是 Yii 拥有 CJson 库的一个原因。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-06
          • 2017-09-19
          • 2017-12-03
          • 1970-01-01
          • 2015-05-29
          • 2020-01-30
          • 2015-08-20
          • 2021-06-27
          相关资源
          最近更新 更多