Подтвердить что ты не робот

Зачем использовать кодировку CJSON, когда у нас есть json_encode

Я создаю API для веб-сайта с помощью Yii. Я знаю, что есть класс утилиты CJson и имеет функцию, называемую encode.

Насколько я знаю, есть дополнительные параметры, которые можно настроить в собственной функции json_encode, такой как JSON_NUMERIC_CHECK, которая действительно полезна. Он создает

{
    "id": 17
}

вместо Yii CJSON encode, который делает строку '17' строкой.

{
    "id": "17"
}

Итак, мой вопрос заключается в том, есть ли какая-либо причина, по которой я должен использовать кодировку CJSON вместо встроенной функции PHP json_encode?

4b9b3361

Ответ 1

Единственное, что может показаться минимальной поддержкой PHP-версии.

Yii поддерживает php 5.1 как минимальную версию. Смотрите страницу Yii Installation. Хотя json_encode/json_decode введен в php 5.2. Так что это может быть причиной того, что Yii имеет библиотеку для CJson.

Ответ 2

Этот вопрос старый. Я работаю с Yii 1.4, PHP 5.4.

Разница, которую я нашел, это "json_encode" кодирует только свойства класса, а поскольку "CJSON:: encode" кодирует только свойства, перечисленные в документации по классу, используя аннотацию @property... Это верно, по крайней мере, для CActiveRecord

Ответ 3

Я понимаю, что это старая тема, но хотелось добавить еще одну причину.

Выполняя всю кодировку JSON через вспомогательный класс, например CJSON, вы можете переопределить поведение по умолчанию. Например вы можете использовать его для добавления маркера, чтобы предотвратить захват JSON.

Ответ 4

В дополнение к @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
}