Pourquoi utiliser CJSON encode alors que nous avons JSON encode

je construis une API pour un site Web en utilisant Yii. Je sais qu'il existe une classe utilitaire appelé CJson et a une fonction appelée encoder.

autant que je sache, il y a des paramètres supplémentaires qui peuvent être personnalisés dans la fonction native json_encode comme le JSON_NUMERIC_CHECK qui est vraiment utile. Il crée

{
    "id": 17
}

au lieu de L'encodage CJSON de Yii qui fait du '17' une chaîne.

{
    "id": "17"
}

donc mon la question Est de savoir s'il y a une raison pour que J'utilise CJSON encode à la place de la fonction PHP json_encode ?

28
demandé sur ajaybc 2013-06-28 10:00:05

4 réponses

seule chose que je peux penser le support de version php minimum.

Yii support de php 5.1 minimum, Voir Yii Page d'Installation . Tandis que json_encode / json_decode introduit dans php 5.2. Donc ça peut être une raison pour que Yii ait une bibliothèque pour CJson.

11
répondu kuldeep.kamboj 2013-06-28 06:04:16

cette question Est ancienne. Je travaille avec Yii 1.4, PHP 5.4.

la différence que j'ai trouvé était 'json_encode' encodant seulement les propriétés de classe, tandis que 'CJSON::encodant' encodait seulement les propriétés listées dans la documentation de classe en utilisant l'annotation de propriété@... Cela est vrai au moins pour CActiveRecord

4
répondu amit bakle 2014-01-18 11:50:02

je sais que c'est un vieux sujet, mais je voulais ajouter une autre raison.

en faisant tout l'encodage JSON à travers une classe helper comme CJSON, vous pouvez outrepasser le comportement par défaut. Par exemple vous pouvez l'utiliser pour ajouter un token pour empêcher le détournement de JSON .

4
répondu SystemicPlural 2017-05-23 12:34:15

en plus de @kuldeep.kamboj, je devrais dire CJSON::encode traitera que 17 comme un entier si vous définissez la data type de la valeur comme ceci:

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

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

// $jsonString will be:
{
    "id": 17
}
0
répondu Mohammad Eghlima 2016-02-02 09:12:37