Официально ли JSON поддерживает преобразование нативных типов? - PullRequest
2 голосов
/ 23 января 2011

В PHP вы можете использовать json_encode для кодирования объекта в виде строки json.

$string = json_encode($some_object);

Тем не менее, в PHP есть стандартное множество типов данных, которые не считаются объектами (целыми числами, строками и т. Д.). Если вы передаете строку в 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 оставило это как неоднозначное, но я дерьмо интерпретирую эти вещи.

Я спрашиваю, потому что меня интересует вероятность того, что это поведение исчезнет из будущей версии функции. то есть, если это где-то кодифицировано в спецификации, вероятность его исчезновения будет меньше, чем если бы это был кто-то, кого кто-то думал добавить во время разработки.

Ответы [ 2 ]

3 голосов
/ 23 января 2011

JSON вообще не заботится о нативных типах.Разработчик библиотеки JSON или его функциональных возможностей зависит от того, как JSON переводится в типы и из типов, которые язык программирования может использовать / понимать.

1 голос
/ 23 января 2011

Вы правы, Аллан, RFC недостаточно ясен в этом вопросе.

С одной стороны, на предоставленной вами ссылке на RFC говорится во втором абзаце введения:

JSON может представлять четыре примитивных типа (строки, числа, логические значения и нуль) и два структурированных типа (объекты и массивы).

Но с другой стороны, когда вы продолжаете абзац, в котором говорится о фактической грамматике JSON, он говорит:

Текст JSON представляет собой сериализованный объект или массив.
JSON-текст = объект / массив

Таким образом, основываясь на грамматике, вы можете сказать, что 'a string' не может считаться действительным JSON-текстом.

Лично я предпочел бы, чтобы грамматика "исправилась", чтобы сказать JSON-text = value, таким образом, любой из false / null / true / object / array / number / string становится действительным JSON-текстом.

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

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

...