JSON никто не придумывал. Его, по словам автора, просто нашли — лежал внутри JavaScript и ждал.
Звучит как понты, но это буквально так. Дуглас Крокфорд в районе 2001-го (компания State Software) не сочинял новый формат. Он взял синтаксис, которым в JS уже описывали объект — фигурные скобки, ключ-значение — и сказал: вот этим и будем обмениваться данными. Зарегистрировал json.org, описал на одной страничке. Всё.
А теперь зачем это вообще понадобилось.
Тогда правил XML
Начало нулевых. Данные между браузером и сервером гоняли в XML. Штука мощная, спору нет: схемы, валидация, namespace'ы. Но для «отдай мне юзера с именем и почтой» это как забивать гвоздь отбойным молотком.
Открывающий тег, закрывающий тег — по два на каждое поле. Половина байтов это </вот\_это\_вот>. Чтобы прочитать — тащи парсер, ковыряй DOM, доставай значения по узлам, не забудь про схему и namespace. Возни много, данных мало. Перебор для простого обмена.
Перелом — AJAX
2005-й, Джесси Джеймс Гарретт вводит слово AJAX. Идея: браузер дёргает сервер в фоне, без перезагрузки страницы. Тогда это была магия — карты, которые тянутся мышкой, подсказки в поиске на лету.
И вот тут XML посыпался. Браузер на JavaScript, сервер ему шлёт XML — а чтобы разобрать, опять DOM, опять руками.
А JSON? Он же синтаксис самого JavaScript. Пришёл ответ — и на выходе сразу готовый объект, разбирать нечего. Родное. (Поначалу его вообще скармливали eval() — да, исполняли как код, дыра жуткая; потом одумались и сделали безопасный JSON.parse().)
С этого момента всё.
Чем взял
Горстка типов, и никаких церемоний. Объект, массив, строка, число, true/false/null. Шесть штук. Человек читает глазами без тулзы, машина парсит влёт. Учить нечего — открыл и понял.
Дальше его просто причесали комитеты: RFC 4627 → ECMA-404 → RFC 8259 / STD 90 (2017, финал). Скучная часть, но без неё формат не стал бы стандартом.
Кстати, забавное. Крокфорд впихнул в лицензию пункт: «The Software shall be used for Good, not Evil» — софт использовать во благо, не во зло. И понеслось: юристы крупных контор хватались за голову, а одна на полном серьёзе попросила письменное разрешение «использовать во зло». Он разрешил.
Но не всё гладко
JSON выехал на минимализме — и тем же местом огребает. Чего в нём нет:
— Комментарии. Никаких. Хочешь пометку в конфиге — а некуда.
— Даты и бинарь. Нет таких типов. Дата едет строкой, и каждый парсит как хочет.
— И главная подстава — числа. Сам стандарт точность не ограничивает, но почти все реализации (привет, JavaScript) суют число в float64. И целый id больше 2^53 (\~9 квадриллионов — туда дорастают банковские счётчики, телеком, 64-битные Snowflake ID) теряет точность молча. Послал 1234567890123456789 — на той стороне прилетело что-то рядом, и никто не ругнулся. Кто-то умеет тянуть аккуратно (BigInt в JS, UseNumber в Go), но самый надёжный межъязыковой костыль — гнать большой id строкой, в кавычках. Кто не знал — ловил баг, который «на моих данных не воспроизводится».
Схема? JSON Schema — вообще сторонняя спека, приехала позже и сбоку, в стандарт не входит. Запятую в конце списка (trailing comma) тоже нельзя — прод падал и не на таком.
Итого
JSON победил XML не потому, что мощнее. Наоборот — он слабее. XML мог всё, но за всё драл. JSON умел мало, зато не выносил мозг.
Короче, выехал не самый мощный, а самый ненапряжный. Как-то так))
Мне тут понравилось копать-ковырять в историю инструментов. Ну, чтобы получше понимать, почему так. Ну кто вам об этом расскажет, если не я?
❤️ - если продолжать исторические справки
@analyst_exe
Post #663
233

- ❤ 11