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 ?
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.
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
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 .
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
}