JSON как формат обмена данными
JSON как формат обмена данными
Введение
Когда клиент и сервер обмениваются данными, им нужен общий язык. Сегодня стандартом де-факто стал JSON (JavaScript Object Notation). Это лёгкий, читаемый людьми формат, который понимают практически все языки программирования. Как тестировщик, ты будешь читать и анализировать JSON-ответы десятки раз в день.
Что такое JSON
JSON — текстовый формат представления структурированных данных. Несмотря на слово «JavaScript» в названии, JSON не зависит от языка и используется везде.
Базовые типы данных в JSON
| Тип | Пример | Заметки |
|---|---|---|
| Строка | "Анна" | Всегда в двойных кавычках |
| Число | 42, 3.14 | Без кавычек |
| Булев | true, false | Только строчные буквы |
| Null | null | Отсутствие значения |
| Массив | [1, 2, 3] | Упорядоченный список |
| Объект | {"key": "value"} | Пары ключ-значение |
Пример: объект пользователя
{
"id": 42,
"name": "Анна Иванова",
"email": "anna@test.com",
"isActive": true,
"score": 98.5,
"role": null,
"tags": ["tester", "junior"],
"address": {
"city": "Москва",
"street": "Тверская",
"house": 10
}
}
Здесь есть все типы: число (id), строки (name, email), булев (isActive), дробное число (score), null (role), массив (tags), вложенный объект (address).
JSON vs XML
| Критерий | JSON | XML |
|---|---|---|
| Читаемость | Высокая | Средняя (много тегов) |
| Размер | Компактный | Больше |
| Поддержка | Все языки | Все языки |
| Использование | REST API, конфиги | SOAP, legacy-системы |
Пример одних и тех же данных:
JSON:
{"name": "Анна", "age": 25}
XML:
<user>
<name>Анна</name>
<age>25</age>
</user>
JSON path нотация
Чтобы обратиться к конкретному полю в JSON, используется dot-notation:
response.user.address.city → "Москва"
response.tags[0] → "tester"
response.tags[1] → "junior"
В Postman эту нотацию используют в тестах и при извлечении переменных.
Типичные баги в JSON-ответах
Вот что тестировщик должен проверять в JSON-ответах:
| Тип бага | Пример | Что проверять |
|---|---|---|
| Отсутствует обязательное поле | id не пришло | Все required поля присутствуют |
| Неправильный тип | "age": "25" вместо "age": 25 | Числа — числа, строки — строки |
null вместо значения | "name": null | Null только там, где допустим |
| Лишние/вложенные данные | Пришли пароли, внутренние id | Нет чувствительных данных |
| Синтаксическая ошибка | Незакрытая скобка | JSON вообще парсится |
Как валидировать JSON
- jsonlint.com — вставь JSON и проверь синтаксис.
- Postman — автоматически форматирует и подсвечивает ошибки.
- DevTools браузера → Network → Preview — красивое дерево ответа.
- jq в терминале — мощный инструмент для работы с JSON в командной строке.
Частые ошибки тестировщиков
- Не проверять типы данных.
"42"(строка) и42(число) — это разные вещи для кода, хотя выглядят похоже. - Игнорировать вложенные объекты. Баг может быть внутри
address.city, а не на верхнем уровне. - Не замечать лишние поля. Если в ответе пришёл
passwordHash— это баг безопасности. - Забывать про пустые массивы vs null.
[]иnull— разные значения с разной семантикой.
Что мы запомним
- JSON — текстовый формат для обмена данными, стандарт для REST API.
- Типы: строка, число, булев, null, массив, объект.
- JSON компактнее XML и проще читается.
- Для навигации по JSON используй dot-notation:
response.user.address.city. - Всегда проверяй: наличие обязательных полей, правильность типов, отсутствие чувствительных данных.