История форматировщика JSON

Сегодня на JSON говорит большинство веб-API, но его никогда не проектировал комитет. Его скорее заметили, чем изобрели: это небольшое подмножество JavaScript, которого оказалось достаточно для обмена данными между программами.

Фигурные скобки и вложенные блоки данных, образующие светящееся дерево
Фигурные скобки и вложенные блоки данных, образующие светящееся дерево

Формат, который открыли

Около 2001 года Дуглас Крокфорд и его коллеги из State Software искали способ обмена данными между браузером и сервером без плагинов. Они взяли литералы объектов и массивов, которые JavaScript уже понимал, дали идее имя и опубликовали грамматику на json.org. Она настолько коротка, что помещается на обороте визитной карточки.

Почему нет комментариев

Крокфорд рано убрал комментарии из JSON, потому что их начали использовать для указаний парсеру, а это разрушило бы совместимость. Он советовал удалять комментарии минификатором перед разбором. Поэтому форматировщик сообщает о комментарии как о неожиданном символе, и поэтому для файлов конфигурации существуют форматы JSON5 и JSONC.

От веб-страницы к стандарту

Впервые JSON описали в RFC 4627 в 2006 году. Ecma выпустила ECMA-404 в 2013 году, а IETF в 2017 году заменила прежние тексты документом RFC 8259, который требует UTF-8 для JSON, передаваемого между системами. Грамматика почти не изменилась со времён json.org: объекты, массивы, строки, числа, true, false и null.

Числа и пути

Сам JSON не ограничивает числа, но большинство парсеров хранит их как 64-битные числа с плавающей точкой, поэтому целые больше 9007199254740991 могут незаметно потерять точность. Большие идентификаторы поэтому часто передают строками. Чтобы указывать на значение, Стефан Гёсснер в 2007 году предложил JSONPath по образцу XPath, и в 2024 году он стал стандартом RFC 9535. Пути, которые копирует этот форматировщик, используют эту запись со знаком доллара и квадратными скобками.

Часто задаваемые вопросы

Кто изобрёл JSON?

Дуглас Крокфорд описал и популяризировал JSON в начале 2000-х, хотя сам говорит, что открыл его, ведь это уже существовавшее подмножество JavaScript.

Почему JSON не допускает запятые в конце и одинарные кавычки?

Грамматику сделали как можно меньше, чтобы любой язык разбирал её одинаково. Каждое лишнее удобство дало бы ещё один повод для расхождения двух парсеров.

JSON и объект JavaScript это одно и то же?

Нет. JSON это текст. Ключи требуют двойных кавычек, а функции, undefined, комментарии, NaN и Infinity запрещены, хотя JavaScript принимает их в коде.

Готовы попробовать?

Откройте PictorX в своем браузере — установка не требуется, для запуска не требуется кредитная карта.

Открыть форматировщик JSON