# JSON

> Текстовый формат обмена данными на основе синтаксиса объектов JavaScript — объекты, массивы, строки, числа, логические значения и null; стандарт де-факто для веб-API и конфигураций.

Источник: https://llmdocs.ru/wiki/json/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: JavaScript Object Notation
- **Автор**: Дуглас Крокфорд (популяризация с 2001 года)
- **Стандарты**: RFC 8259 (IETF, 2017), ECMA-404 (2013, 2-е изд. 2017)
- **MIME-тип**: application/json
- **Расширение**: .json
- **Кодировка**: UTF-8 (обязательна при обмене между системами)
- **Типы данных**: объект, массив, строка, число, true/false, null
- **Производные**: JSON Lines, JSON Schema, JSON5, I-JSON
**JSON** (англ. *JavaScript Object Notation* — нотация объектов JavaScript; произносится «джейсон») — простой текстовый формат для представления структурированных данных. Он основан на синтаксисе литералов [JavaScript](https://llmdocs.ru/wiki/javascript.md), но не зависит от языка: библиотеки для чтения и записи JSON есть практически везде.[3] JSON — основной формат тел запросов и ответов веб-API (см. [REST](https://llmdocs.ru/wiki/rest.md)), конфигурационных файлов (`package.json`, `tsconfig.json`), документов в NoSQL-базах и логов; а в мире больших языковых моделей — формат [вызова инструментов](https://llmdocs.ru/wiki/tool-use.md) и структурированных ответов.

## История

Дуглас Крокфорд в начале 2000-х годов «открыл» и описал формат, который уже был подмножеством JavaScript, и опубликовал его спецификацию на сайте json.org. Благодаря простоте JSON быстро вытеснил XML из веб-API: браузер мог разобрать его встроенными средствами, а данные читались и человеком. Формат закреплён двумя согласованными стандартами — ECMA-404 и RFC 8259 (2017).[1][2]

## Синтаксис

Шесть типов значений:

| Тип | Пример |
|---|---|
| Объект | `{"name": "Анна", "age": 31}` |
| Массив | `[1, 2, "три", null]` |
| Строка | `"текст с \"кавычками\" и \n переводом строки"` |
| Число | `42`, `-3.14`, `6.02e23` |
| Логическое значение | `true`, `false` |
| Пусто | `null` |

```json
{
  "id": 1027,
  "title": "Статья о JSON",
  "tags": ["формат", "веб"],
  "published": true,
  "author": {"name": "Анна", "email": null},
  "rating": 4.8
}
```

Строгие правила, о которые спотыкаются чаще всего:

- ключи и строки — только в **двойных** кавычках;
- **нет комментариев**;
- **нет висячих запятых** после последнего элемента;
- нет `undefined`, `NaN`, `Infinity`, дат и двоичных данных — даты обычно передают строкой в формате ISO 8601 (`"2026-11-09T12:00:00Z"`), двоичные данные — в Base64;
- текст для обмена между системами должен быть в UTF-8 (см. [Unicode](https://llmdocs.ru/wiki/unicode-utf8.md)).

## Подводные камни

- **Числа.** Стандарт не ограничивает их точность, но JavaScript хранит все числа как double: целые больше 2⁵³ (9 007 199 254 740 992) теряют точность. Большие идентификаторы поэтому часто передают строками. Профиль I-JSON формализует эти ограничения.[4]
- **Повторяющиеся ключи.** RFC 8259 говорит лишь, что ключи «должны быть уникальны»; разные парсеры по-разному обрабатывают дубликаты, что уже приводило к уязвимостям.
- **Порядок ключей** не гарантирован семантически, хотя большинство библиотек его сохраняет.

## Работа с JSON

```python
import json

data = json.loads('{"a": 1, "b": [true, null]}')   # → {'a': 1, 'b': [True, None]}
text = json.dumps(data, ensure_ascii=False, indent=2)
```

```javascript
const obj = JSON.parse(text);
const s = JSON.stringify(obj, null, 2);
```

В командной строке незаменима утилита **jq** — язык выборки и преобразования JSON:[7]

```bash
curl -s https://api.github.com/repos/jqlang/jq | jq '.stargazers_count'
jq -r '.items[] | select(.status == "active") | .name' data.json
jq -c '.[]' big.json > lines.jsonl
```

`python3 -m json.tool file.json` проверит синтаксис и красиво отформатирует файл.

## Производные форматы

- **JSON Lines** (JSONL, NDJSON) — по одному JSON-объекту на строку.[6] Такой файл можно читать и дописывать построчно, не загружая целиком; формат популярен для логов, датасетов машинного обучения и пакетных запросов к API моделей.
- **JSON Schema** — словарь для описания структуры документа: обязательные поля, типы, допустимые значения.[5] Используется для валидации, генерации форм и документации, лежит в основе OpenAPI и описаний инструментов для LLM. В [Python](https://llmdocs.ru/wiki/python.md) схему из моделей строит Pydantic (см. [Dataclasses и Pydantic](https://llmdocs.ru/wiki/dataclasses-pydantic.md)).
- **JSON5**, **JSONC** — расширения с комментариями и висячими запятыми для конфигураций, написанных людьми (так устроены настройки VS Code).

## JSON и соседние форматы

| Формат | Сильные стороны | Слабые стороны |
|---|---|---|
| JSON | простой, вездесущий, однозначный | без комментариев, многословен |
| YAML | удобен людям, комментарии | неоднозначные правила, отступы; является надмножеством JSON |
| TOML | понятные конфиги (`pyproject.toml`) | плохо подходит для глубокой вложенности |
| XML | схемы, пространства имён, атрибуты | громоздкий |
| Protobuf, MessagePack | компактные и быстрые двоичные форматы | нечитаемы без схемы или инструментов |

Для LLM JSON важен вдвойне: модели генерируют его как текст, поэтому API провайдеров предлагают режимы, гарантирующие соответствие ответа заданной схеме, — см. [Структурированный вывод (JSON mode)](https://llmdocs.ru/wiki/structured-output.md).

## См. также

- [REST](https://llmdocs.ru/wiki/rest.md)
- [pyproject.toml](https://llmdocs.ru/wiki/pyproject-toml.md)
- [Структурированный вывод (JSON mode)](https://llmdocs.ru/wiki/structured-output.md)
- [JavaScript](https://llmdocs.ru/wiki/javascript.md)

## Источники

1. [RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format](https://www.rfc-editor.org/rfc/rfc8259)
2. [ECMA-404 — The JSON Data Interchange Syntax](https://ecma-international.org/publications-and-standards/standards/ecma-404/)
3. [json.org — Introducing JSON](https://www.json.org/json-en.html)
4. [RFC 7493 — The I-JSON Message Format](https://www.rfc-editor.org/rfc/rfc7493)
5. [JSON Schema](https://json-schema.org/)
6. [JSON Lines](https://jsonlines.org/)
7. [jq Manual](https://jqlang.org/manual/)
