JSON-формат¶
JSON (JavaScript Object Notation, читается «джейсон») — это текстовый формат обмена данными, основанный на синтаксисе объектов JavaScript. Он используется для сериализации и передачи структурированных данных между сервером и веб-приложением, а также в конфигурационных файлах и базах данных. JSON отличается от XML меньшим объёмом и простотой чтения как человеком, так и машиной.
¶История
Формат JSON был разработан американским программистом Дугласом Крокфордом в начале 2000-х годов. Первоначально он создавался как подмножество литералов объектов JavaScript, предназначенное для передачи данных в веб-приложениях без использования XML. В 2001 году Крокфорд впервые предложил JSON на сайте json.org, где опубликовал его спецификацию и примеры.
В 2006 году RFC 4627 официально закрепил JSON как стандарт IETF (Internet Engineering Task Force). В 2013 году вышла обновлённая спецификация RFC 7158, а в 2017 году — RFC 8259, который действует по настоящее время. В 2013 году JSON также был стандартизирован как ECMA-404.
С середины 2010-х годов JSON стал доминирующим форматом для обмена данными в веб-API, вытеснив XML во многих приложениях. В 2018 году он был включён в стандарт ECMAScript (JavaScript) как часть языка.
¶Синтаксис
JSON представляет собой набор пар «ключ — значение», организованных в структуры данных. Основные элементы синтаксиса:
- Объект — неупорядоченный набор пар «ключ — значение», заключённый в фигурные скобки
{}. Ключи — строки в двойных кавычках, значения могут быть любого типа. - Массив — упорядоченный список значений, заключённый в квадратные скобки
[]. - Значение — может быть строкой (в двойных кавычках), числом (целым или с плавающей точкой), булевым значением (
trueилиfalse),null, объектом или массивом.
Пример JSON-объекта: ``json { "name": "Иван", "age": 30, "isStudent": false, "hobbies": ["чтение", "спорт"], "address": null } ``
¶Ограничения
- Строки обязательно заключаются в двойные кавычки; одинарные кавычки не допускаются.
- Числа записываются в десятичной системе; ведущие нули не разрешены.
- Комментарии в стандартном JSON отсутствуют, хотя некоторые реализации (например, JSON5) их поддерживают.
- Последний элемент в объекте или массиве не должен содержать запятой после себя.
¶Типы данных
JSON поддерживает шесть типов значений:
- Строка (string) — последовательность символов Unicode, экранирование обратной косой чертой (
\). - Число (number) — целое или с плавающей точкой, может быть отрицательным.
- Булево (boolean) —
trueилиfalse. - Null — пустое значение, обозначается
null. - Объект (object) — неупорядоченный набор пар «ключ — значение».
- Массив (array) — упорядоченный список значений.
¶Применение
¶Веб-разработка
JSON является основным форматом для REST API (Representational State Transfer). Серверы возвращают данные в JSON, а клиенты (браузеры, мобильные приложения) их парсят. Пример — получение списка пользователей: ``json [ {"id": 1, "name": "Анна"}, {"id": 2, "name": "Пётр"} ] ``
¶Конфигурационные файлы
Многие современные программы используют JSON для хранения настроек. Например, файл package.json в Node.js описывает зависимости проекта, а composer.json — в PHP.
¶Базы данных
Некоторые NoSQL-базы данных, такие как MongoDB и Couchbase, хранят данные в формате, близком к JSON (BSON — бинарный JSON). Реляционные базы данных (PostgreSQL, MySQL) поддерживают JSON-поля для хранения гибких структур.
¶Логирование и передача событий
JSON используется для записи логов и передачи событий в системах мониторинга, например, в формате JSON Lines (каждая строка — отдельный JSON-объект).
¶Преимущества и недостатки
¶Преимущества
- Человекочитаемость — синтаксис прост и интуитивно понятен.
- Лёгкость парсинга — встроенная поддержка в JavaScript и большинстве языков программирования.
- Компактность — по сравнению с XML, JSON требует меньше символов для передачи тех же данных.
- Совместимость с веб-технологиями — нативный формат для JavaScript, что упрощает работу в браузерах.
¶Недостатки
- Отсутствие схемы — в стандартном JSON нет встроенного механизма валидации структуры (хотя существуют схемы JSON Schema).
- Ограниченные типы данных — нет поддержки дат, бинарных данных, ссылок.
- Проблемы с безопасностью — при неправильной обработке возможна уязвимость к атакам типа «инъекция JSON» (например, при использовании
eval()в JavaScript). - Размер — для больших объёмов данных JSON может быть менее эффективен, чем бинарные форматы (Protocol Buffers, MessagePack).
¶Сравнение с другими форматами
| Формат | Тип | Человекочитаемость | Скорость парсинга | Размер данных |
|---|---|---|---|---|
| JSON | Текстовый | Высокая | Средняя | Средний |
| XML | Текстовый | Средняя | Низкая | Большой |
| YAML | Текстовый | Высокая | Низкая | Средний |
| Protocol Buffers | Бинарный | Низкая | Высокая | Малый |
| MessagePack | Бинарный | Низкая | Высокая | Малый |
¶Инструменты и библиотеки
Почти все современные языки программирования имеют встроенную поддержку JSON или популярные библиотеки:
- JavaScript —
JSON.parse()иJSON.stringify(). - Python — модуль
json(стандартная библиотека). - Java — библиотеки Jackson, Gson.
- PHP — функции
json_encode()иjson_decode(). - C# — пространство имён
System.Text.Json. - Go — пакет
encoding/json. - Ruby — библиотека
json(встроенная).
¶Безопасность
При работе с JSON необходимо учитывать следующие риски:
- Использование
eval()— в JavaScript парсинг JSON черезeval()может привести к выполнению произвольного кода. Рекомендуется использоватьJSON.parse(). - Инъекция JSON — при вставке пользовательских данных в JSON-строку без экранирования возможна подмена структуры.
- Атаки типа «JSON Hijacking» — в старых браузерах злоумышленники могли перехватывать JSON-ответы через массив. Современные браузеры защищены от этого.
¶Стандартизация
JSON стандартизирован следующими документами:
- RFC 8259 (2017) — «The JavaScript Object Notation (JSON) Data Interchange Format».
- ECMA-404 (2013) — «The JSON Data Interchange Format».
- ISO/IEC 21778:2017 — международный стандарт.
¶Интересные факты
- Название «JSON» предложил Дуглас Крокфорд. Первоначально он хотел назвать формат «JSML» (JavaScript Markup Language), но отказался из-за ассоциаций с XML.
- JSON не является языком разметки, в отличие от XML или HTML, а представляет собой формат данных.
- В 2010 году JSON был включён в стандарт HTML5 как часть технологии Web Storage.
- Формат JSON используется в протоколе WebSocket для передачи сообщений в реальном времени.
¶Источники
- RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
- ECMA-404 — The JSON Data Interchange Format
- json.org — официальный сайт формата
- Крокфорд Д. «JavaScript: The Good Parts» (2008)
- Статья «JSON: The Fat-Free Alternative to XML» (2006)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


