Поддерживает ли JSON «поддержку конверсии родных типов?

В 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-текстом.

Если вы хотите быть строгим на данный момент, я бы пошел с семантикой грамматики.

Я пошлю Дугласа Крокфорда ссылку на этот вопрос, может быть, он может добавить полезную информацию.