为什么在使用json_encode时使用CJSON编码

时间:2013-06-28 06:00:06

标签: php json yii

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

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

{
    "id": 17
}

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

{
    "id": "17"
}

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

4 个答案:

答案 0 :(得分:12)

我唯一能想到的最低PHP版本支持。

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

答案 1 :(得分:4)

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

我发现的差异是'json_encode'只编码类属性,而'CJSON :: encode'只编码使用@property注释在类文档中列出的属性...至少对于CActiveRecord来说这是真的

答案 2 :(得分:4)

我意识到这是一个古老的话题,但又想补充其他原因。

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

答案 3 :(得分:0)

除了@ 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
}