Я создаю API для веб-сайта с помощью Yii. Я знаю, что есть класс утилиты под названием CJson и имеет функцию encode.
Насколько я знаю, есть дополнительные параметры, которые можно настроить в собственной функции json_encode, такой как JSON_NUMERIC_CHECK, которая действительно полезна. Это создает
{ "id": 17 }
вместо кодирования YJI CJSON, который делает строку «17» строкой.
{ "id": "17" }
Поэтому мой вопрос заключается в том, есть ли какая-то причина, по которой я должен использовать кодировку CJSON вместо встроенной функции PHP json_encode?
Единственное, что я могу думать о минимальной поддержке PHP-версии.
Yii поддерживает php 5.1 как минимальную версию См. Страницу установки Yii . Хотя json_encode / json_decode введен в php 5.2. Так что это может быть причиной того, что Yii имеет библиотеку для CJson.
Этот вопрос старый. Я работаю с Yii 1.4, PHP 5.4.
Разница, которую я нашел, это «json_encode» кодирует только свойства класса, тогда как «CJSON :: encode» кодирует только свойства, перечисленные в документации по классу, используя аннотацию @property … Это верно, по крайней мере, для CActiveRecord
Я понимаю, что это старая тема, но хотелось добавить еще одну причину.
Выполняя всю кодировку JSON через вспомогательный класс, такой как CJSON, вы можете переопределить поведение по умолчанию. Например, вы можете использовать его для добавления маркера, чтобы предотвратить захват JSON .
В дополнение к @ kuldeep.kamboj, я должен сказать, что CJSON::encode
будет рассматривать это как целое число, если вы определяете data type
данных значения следующим образом:
// PHP $toBeConverted = array('id' => (int) 17); // or (int) $myInteger $jsonString = \CJSON::encode($toBeConverted); // $jsonString will be: { "id": 17 }