В PHP вы можете использовать json_encode
для кодирования объекта как строки json.
$string = json_encode($some_object);
Однако PHP имеет стандартное множество типов данных, которые не считаются объектами (ints, strings и т. Д.). Если вы передадите строку в json_encode
, это возвращает строку, содержащую оператор javascript, который может использоваться для определения строки.
В менее неудобной формулировке это
echo json_encode("Hello world, please don't " . '"' . "misuse quote's for emphasis " . "or possessive apostrophes' ");
выведет это (готовую строку javascript)
"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' "
Является ли это поведением частью спецификации JSON? То есть, JSON определяет или рекомендует, как реализация должна обрабатывать преобразование родных, неъектных, типов данных? Или вообще есть мнение о конверсии? Мое прочтение RFC оставило это как двусмысленное, но я дерьмо интерпретирую эти вещи.
Я спрашиваю, потому что меня интересует вероятность исчезновения этого поведения из будущей версии функции. т.е. если он где-то кодифицирован в спецификации, он с меньшей вероятностью исчезнет, чем если бы кто-то подумал добавить во время разработки.
JSON вообще не заботится о родных типах. Это зависит от разработчика библиотеки JSON или функциональности относительно того, как JSON переводится на и из типов, которые язык программирования может использовать / понимать.
Вы правы аланом, RFC не достаточно ясен по этому вопросу.
С одной стороны, по ссылке на RFC, которую вы предоставляете, говорится во втором абзаце введения:
JSON может представлять четыре примитивных типа (строки, числа, булевы и нуль) и два структурированных типа (объекты и массивы).
Но, с другой стороны, когда вы продолжаете абзац, который говорит о собственно грамматике JSON, он говорит:
Текст JSON представляет собой сериализованный объект или массив.
JSON-text = объект / массив
Поэтому, основываясь на грамматике, вы можете сказать, что 'a string'
не является допустимым JSON-текстом.
Лично я предпочел бы, чтобы грамматика «исправлена», чтобы сказать JSON-text = value
таким образом сделав любой из значений false / null / true / object / array / number / string
действительным JSON-текстом.
Если вы хотите быть строгим на данный момент, я бы пошел с семантикой грамматики.
Я пошлю Дугласа Крокфорда ссылку на этот вопрос, может быть, он может добавить полезную информацию.