Открыть сервис

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 поддерживает шесть типов значений:

  1. Строка (string) — последовательность символов Unicode, экранирование обратной косой чертой (\).
  2. Число (number) — целое или с плавающей точкой, может быть отрицательным.
  3. Булево (boolean) — true или false.
  4. Null — пустое значение, обозначается null.
  5. Объект (object) — неупорядоченный набор пар «ключ — значение».
  6. Массив (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 или популярные библиотеки:

  • JavaScriptJSON.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 →