JSON

JSON (JavaScript Object Notation) — это текстовый формат обмена структурированными данными, который используется для передачи информации между приложениями, веб-сервисами и API, а также для хранения настроек и объектов данных. JSON представляет информацию в виде пар «ключ — значение», объектов и массивов, благодаря чему легко читается человеком и быстро обрабатывается программами. Формат применяется в веб-разработке, мобильных приложениях, микросервисной архитектуре, облачных сервисах и NoSQL-базах данных. Благодаря простому синтаксису, компактности и поддержке практически всеми языками программирования JSON стал отраслевым стандартом обмена данными и во многих сценариях заменил XML.

JSON: что это

Что такое JSON-файл

Что означает JSON

JSON (JavaScript Object Notation) — это текстовый, языково-независимый формат обмена структурированными данными, основанный на синтаксисе JavaScript и поддерживаемый современными языками программирования. Разработан для лёгкой передачи данных между клиентом и сервером (особенно в веб-API), хранения конфигураций (файлы .json) и сериализации объектов в текстовое представление.

Как расшифровывается аббревиатура

JSON расшифровывается как JavaScript Object Notation — нотация объектов JavaScript. Несмотря на привязку к JavaScript в названии, JSON является языково-независимым текстовым форматом обмена данными, который используется практически во всех современных языках программирования. JSON был разработан в начале 2000-х годов Дугласом Крокфордом как альтернатива XML для более лёгкой и быстрой передачи данных между сервером и веб-приложениями.

JSON простыми словами

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

JSON-файл — что это и как открыть

JSON-файл — это

JSON-файл — это обычный текстовый файл с расширением .json, который содержит данные в формате JSON. Он не является исполняемым или бинарным — это чистый текст, который можно открыть и прочитать в любом текстовом редакторе.

Как выглядит JSON — пример структуры JSON-файла

JSON представляет данные в виде пар «ключ: значение», где ключи всегда строки в двойных кавычках. Значения могут быть строками, числами, логическими значениями (true/false), массивами (в квадратных скобках) или вложенными объектами (в фигурных скобках). Данные организуются иерархически, что позволяет описывать сложные структуры. Вложенные объекты позволяют создавать иерархии любой глубины.

Пример простого JSON-документа, описывающего информацию о человеке:

{
  "name": "Иван Петров",
  "age": 30,
  "isStudent": false,
  "address": {
    "city": "Москва",
    "street": "Тверская",
    "house": 10
  },
  "skills": ["Python", "SQL", "JavaScript"]
}

Как открыть JSON-файл?

  • Текстовые редакторы (Блокнот, Notepad++, Sublime Text, VS Code) — для быстрого просмотра и редактирования. Редакторы с подсветкой синтаксиса делают структуру более наглядной.
  • Браузеры (Google Chrome, Firefox, Safari) — можно перетащить файл в окно браузера, и он отобразит содержимое в удобном для чтения виде (с отступами и сворачиваемыми узлами).
  • Специализированные JSON-редакторы (JSON Editor Online, Altova XMLSpy, Oxygen) — предоставляют древовидное представление, валидацию, форматирование и другие инструменты.
  • Средства разработки — встроенные просмотрщики JSON в IDE (например, Visual Studio) и инструменты разработчика в браузерах.
  • Командная строка — утилиты jq (для фильтрации и обработки) или cat для просмотра сырого текста.

JSON-файл не предназначен для открытия в офисных программах вроде Excel напрямую (хотя импорт из JSON возможен). Для работы с JSON обычно используют специализированный софт или программные парсеры.

Можно ли редактировать JSON в обычном текстовом редакторе

Да, можно. Поскольку JSON — это обычный текстовый формат, вы можете открыть его в Блокноте Windows, TextEdit (macOS), gedit (Linux) и внести изменения.

Однако при редактировании в текстовых редакторах следует соблюдать синтаксис: одна пропущенная запятая сделает файл невалидным. Нельзя использовать комментарии (JSON их не поддерживает). Поэтому рекомендуется использовать инструмент с подсветкой синтаксиса и проверкой валидности, например, Visual Studio Code.

Для чего нужен JSON

JSON — это универсальный формат для передачи, хранения и обмена структурированными данными между системами.

Основные области применения:

  • Обмен данными между клиентом и сервером. Веб-приложения отправляют данные на сервер (например, содержимое формы) в формате JSON и получают ответы в том же формате (REST API, AJAX-запросы).
  • Сериализация данных — преобразование сложных объектов (списки, вложенные структуры) в строку для передачи по сети или записи на диск с последующей возможностью восстановления (десериализации) на другой стороне.
  • Конфигурационные файлы — хранение настроек приложений и инструментов (например, package.json в Node.js, tsconfig.json в TypeScript, манифесты браузерных расширений).
  • Хранение в NoSQL-базах — документные БД (MongoDB, CouchDB) используют JSON или его бинарный вариант BSON для хранения записей.
  • API и веб-сервисы — большинство современных API возвращают данные в JSON, поскольку формат легко парсится на любом языке программирования.

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

Пример JSON и применение

Почему JSON стал стандартом обмена данными

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

  • Парсеры встроены в стандартные библиотеки всех популярных языков; парсинг быстрее и легче, чем XML.
  • Нативная поддержка в JavaScript. Встроенные методы JSON.parse() и JSON.stringify() делают JSON естественным выбором для веб-приложений.
  • Можно добавлять новые поля без изменения существующих — упрощает версионирование API.
  • Позволяет описывать сложные структуры. В результате JSON вытеснил XML в большинстве веб-API.

Где применяется JSON: примеры

  • Веб-разработка (AJAX). Когда вы прокручиваете ленту новостей и подгружаются новые посты, браузер отправляет AJAX-запрос, сервер возвращает JSON, и JavaScript динамически рендерит новые элементы.
  • Отправка формы регистрации на сервер — данные формы (имя, email, пароль) сериализуются в JSON и передаются в теле POST-запроса (например, { "name": "Иван", "email": "ivan@mail.ru", "password": "..." }). Это стандартная практика для AJAX-запросов в веб-приложениях.
  • Получение данных от API — например, публичные API погоды возвращают ответ в JSON (например, { "temp": 22, "condition": "ясно", "city": "Moscow" }). Клиент парсит JSON и отображает данные.
  • Конфигурационные файлы. В экосистеме Node.js каждый проект содержит package.json, где перечислены зависимости, скрипты, метаданные. TypeScript использует tsconfig.json. Расширения Chrome хранят манифест в JSON.
  • Логирование в структурированном формате — современные системы логирования (ELK Stack, Splunk, CloudWatch) предпочитают JSON-логи, где каждая запись — это JSON-объект с полями времени, уровня, сообщения и контекста (например, { "timestamp": "2025-...", "level": "error", "message": "...", "userId": 123 }), что упрощает фильтрацию и анализ.
  • Хранение записей в MongoDB — MongoDB хранит документы в формате BSON (бинарная версия JSON), но клиентские библиотеки работают с документами как с JSON-объектами. Записи вставляются и извлекаются в JSON-подобном виде.
  • Обмен данными между микросервисами. Микросервисы в корпоративной архитектуре часто общаются по HTTP с использованием JSON-сообщений. Сервис заказов отправляет JSON-запрос в сервис доставки, тот обрабатывает и возвращает статус.

Как устроен JSON

Основные элементы JSON: объекты, массивы, ключи и значения

JSON использует две основные структуры, которые комбинируются для описания любых данных: объект и массив.

Объект (Object) — это неупорядоченный набор пар «ключ-значение», заключённый в фигурные скобки {}. Ключ всегда должен быть строкой в двойных кавычках. После ключа ставится двоеточие, затем значение. Пары разделяются запятыми.

{
  "name": "Анна",
  "age": 25
}

Массив (Array) — это упорядоченный список значений, заключённый в квадратные скобки []. Элементы массива разделяются запятыми. Массив может содержать значения любого допустимого типа, в том числе объекты и другие массивы.

["красный", "зеленый", "синий"]

Ключ — строка в двойных кавычках, однозначно идентифицирующая значение в объекте. Ключи должны быть уникальными внутри объекта.

Значение — может быть одного из следующих типов:

  • Строка — последовательность символов в двойных кавычках (поддерживается экранирование \n, \" и др.).
  • Число — целое или дробное, в десятичной системе (без ведущих нулей), может быть отрицательным.
  • Логическое — true или false (без кавычек).
  • Null — специальное значение для обозначения отсутствия данных.
  • Объект — вложенная структура в фигурных скобках.
  • Массив — вложенный список в квадратных скобках.

Пример, иллюстрирующий все типы:

{
  "id": 1001,
  "name": "Телефон",
  "price": 599.99,
  "inStock": true,
  "description": null,
  "dimensions": {
    "width": 70,
    "height": 140
  },
  "colors": ["black", "silver", "gold"]
}

Здесь ключи dimensions и colors содержат вложенные структуры.

Как работает JSON

Как приложения читают и обрабатывают JSON

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

Например, на языке Python:

import json

# Десериализация: чтение JSON из строки в объект Python
json_string = '{"name": "Анна", "age": 25}'
data = json.loads(json_string)
print(data["name"])  # Вывод: Анна

# Сериализация: преобразование объекта Python в JSON-строку
obj = {"name": "Иван", "age": 30}
json_string = json.dumps(obj)
print(json_string)  # Вывод: {"name": "Иван", "age": 30}

В JavaScript это встроено в язык:

const jsonString = '{"name": "Анна", "age": 25}';
const obj = JSON.parse(jsonString);
console.log(obj.name);

const obj2 = { name: "Иван", age: 30 };
const jsonString2 = JSON.stringify(obj2);
console.log(jsonString2);

Парсеры JSON для большинства языков реализованы эффективно и поддерживают большие объёмы данных. В веб-браузерах парсинг и сериализация выполняются нативно, что делает их чрезвычайно быстрыми.

Как данные передаются в формате JSON

Передача данных в формате JSON обычно происходит по протоколу HTTP, хотя возможны и другие транспорты (WebSocket, очереди сообщений).

Сценарий передачи:

  1. Клиент отправляет запрос. В HTTP-запросе клиент может указать, что отправляет данные в JSON через заголовок Content-Type: application/json. Тело запроса содержит JSON-строку.
  2. Сервер обрабатывает запрос. Серверное приложение (например, веб-сервис на Java, Python, Node.js) читает тело запроса, парсит JSON в свои внутренние объекты, выполняет бизнес-логику (например, создаёт заказ в базе данных).
  3. Сервер формирует ответ. Сервер сериализует результат (например, объект статуса или созданный заказ) в JSON-строку и отправляет клиенту с заголовком Content-Type: application/json.
  4. Клиент получает и парсит ответ. Браузер или мобильное приложение получают HTTP-ответ, парсят JSON и используют данные для обновления интерфейса или выполнения дальнейших действий.

Пример HTTP-запроса и ответа

Запрос (клиент → сервер):

POST /api/orders HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 56

{
  "productId": 1001,
  "quantity": 2,
  "customerId": 500
}

Ответ (сервер → клиент):

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 74

{
  "orderId": 12345,
  "status": "created",
  "totalPrice": 1199.98
}

Благодаря своей текстовой природе JSON легко просматривать и отлаживать с помощью инструментов разработчика в браузере или утилит командной строки (например, curl).

Что можно использовать вместо JSON?

Несмотря на популярность, в некоторых случаях используют альтернативные форматы:

  • BSON (Binary JSON) — бинарный вариант JSON, используемый в MongoDB. Занимает больше места, чем JSON, но позволяет эффективно хранить двоичные данные и даты.
  • XML (eXtensible Markup Language) — более громоздкий, но поддерживает строгую валидацию по схемам (XSD), пространства имён, комментарии. Используется в корпоративных интеграциях (SOAP, документооборот).
  • YAML (YAML Ain't Markup Language) — более читаемый для людей, использует отступы вместо скобок и запятых. Популярен в конфигурационных файлах (Ansible, Kubernetes, Docker Compose). Поддерживает комментарии.
  • TOML (Tom's Obvious, Minimal Language) — ещё один формат для конфигураций, использует синтаксис, похожий на INI-файлы, но с поддержкой вложенных структур. Используется в Rust-проектах (Cargo.toml), Python (pyproject.toml).
  • MessagePack, Avro, Protobuf — бинарные форматы с высокой скоростью сериализации/десериализации и малым размером. Используются в высоконагруженных системах, при передаче больших объёмов данных.
  • CSV (Comma-Separated Values) — табличный формат для простых плоских данных, не подходит для иерархических структур.

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

Чем JSON отличается от XML

Характеристика JSON XML
Синтаксис Компактный, минималистичный Громоздкий, много тегов
Читаемость Высокая Хорошая, но больше шума
Размер данных Меньше (нет закрывающих тегов) Больше (закрывающие теги)
Типы данных Строки, числа, булевы, null, объекты, массивы Все текстовые, типы — по схемам
Валидация JSON Schema (реже) DTD, XSD (широко)
Комментарии Нет Да
Скорость парсинга Выше Ниже
Основное применение Веб-API, конфиги, обмен данными Документооборот, корпоративные интеграции

Пример одного и того же объекта:

JSON:

{
  "person": {
    "name": "Анна",
    "age": 30,
    "skills": ["Java", "SQL"]
  }
}

XML:

<person>
  <name>Анна</name>
  <age>30</age>
  <skills>
    <skill>Java</skill>
    <skill>SQL</skill>
  </skills>
</person>

Преимущества и ограничения JSON

Преимущества:

  • Простота и читаемость, понятная даже неспециалистам.
  • Компактность — минимальный синтаксис экономит трафик.
  • Высокая производительность парсинга, особенно в JavaScript.
  • Универсальность — поддержка во всех языках программирования.
  • Поддержка базовых типов: строки, числа, булевы, null, объекты, массивы.
  • Гибкость — легко добавлять новые поля без изменения существующих.
  • Стандартизация — формальные спецификации (RFC 8259, ECMA-404).

Ограничения:

  • Отсутствие комментариев (уступает YAML для конфигов).
  • Ограниченная валидация (JSON Schema слабее XSD для XML).
  • Ключи — только строки в двойных кавычках.
  • Нет расширенных типов (даты, двоичные данные) — требуется согласование.
  • Проблемы с большими числами (потеря точности в некоторых языках).
  • Нет ссылок и циклов — приводит к дублированию данных.
  • Уязвимость к инъекциям при неправильной обработке пользовательского ввода.

ELMA365

Частые вопросы

JSON — это язык программирования?

Нет. JSON (JavaScript Object Notation) — это текстовый формат обмена структурированными данными. Несмотря на название, он не является языком программирования и используется практически всеми современными языками для передачи и хранения информации.

Почему у JSON-файла расширение .json?

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

Можно ли использовать JSON без JavaScript?

Да. Хотя формат появился на основе синтаксиса JavaScript, сегодня JSON поддерживается практически всеми популярными языками программирования, включая Python, Java, C#, PHP, Go, Rust и многие другие. Поэтому он широко применяется не только в веб-разработке, но и в мобильных, серверных и настольных приложениях.

Почему JSON не поддерживает комментарии?

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

Когда JSON не подходит для хранения данных?

JSON не всегда является лучшим выбором для сложных документов, требующих строгой схемы, пространств имён, цифровых подписей или встроенных комментариев. В таких случаях чаще используют XML, а для высокопроизводительного обмена данными — бинарные форматы, например Protocol Buffers, Avro или MessagePack.