JSON — это тот незаметный герой, который делает взаимодействие между клиентом и сервером быстрым и удобным. Если вы когда‑то ловили себя на мысли «почему ответ от API выглядит так просто?» — добро пожаловать: сейчас разберёмся, как читать, формировать и сознательно «ломать» JSON, чтобы понимать поведение REST‑сервисов и уверенно работать в Postman и похожих инструментах.
Два основных формата передачи данных
При тестировании API чаще всего встречаются два формата передачи данных: XML и JSON. XML — это стандартный формат для SOAP, тогда как JSON доминирует в экосистеме REST API из‑за простоты чтения и меньшего объёма.
Как устроен JSON
В JSON в качестве значений могут выступать:
- объект (JSON‑object);
- массив (JSON‑array);
- число (целое или с плавающей точкой);
- литералы true, false, null;
- строка (обязательно в кавычках).
Для тестировщика это значит: в REST‑запросах и ответах вы обычно увидите объекты и массивы с вложенностью, и умение быстро навигировать по ним — ключ к эффективной работе.
JSON-объект
Объект в JSON — это неупорядоченное множество пар "ключ:значение", заключённое в фигурные скобки { }. Ключ всегда строка и обязательно берётся в кавычки. Значение может быть любым из перечисленных типов.
Наглядный пример запроса подсказок (упрощённо):
{
"query": "Виктор Иван",
"count": 7
}
Здесь:
- "query" — ключ (параметр поиска), значение — строка;
- "count" — ключ, значение — число (количество подсказок).
Если сервер ожидает параметр с именем ключа, именно по названию ключа он будет извлекать значение. Порядок пар не играет роли, но на практике встречаются системы, которые на это не опираются — такие случаи нужно тестировать специально.
| Неправильно (в виде примера) | Правильно |
| { "a": 1, { x:1, y:2 } } | { "a": 1, "inner_object": { "x":1, "y":2 } } |
| { "a": 1, [2,3,4] } | { "a": 1, "inner_array": [2,3,4] } |
Ключевые правила для объектов:
- Ключи — всегда строки и должны быть в кавычках (в отличие от JavaScript-литерала);
- Пары разделяются запятыми, а после последней пары запятая недопустима;
- Можно использовать простые идентификаторы или предпочитать snake_case / camelCase — важно согласовать стандарт с командой.
Ключ или свойство?
Термины «ключ» и «свойство» часто используются взаимозаменяемо. В контексте JSON корректно говорить и так, и так: ключ — это поле в паре "ключ:значение", свойство — атрибут объекта в объектно‑ориентированной модели.
JSON-массив
Массив — это упорядоченный набор значений, заключённый в квадратные скобки []. Поскольку массивы упорядочены, доступ к элементам идёт по индексу, и перестановка элементов меняет смысл структуры.
Примеры значений внутри массива:
- числа: [1, 5, 10, 33]
- строки: ["MALE", "FEMALE"]
- смешанные типы: [1, "Андрюшка", 10]
- объекты как элементы: [1, {"a":1, "b":2}, "текст"]
Типичный ответ сервиса подсказок — это массив объектов. Каждый элемент массива — отдельная подсказка со своим набором полей и дополнительным вложенным объектом с данными.
| Структура | Пример | Комментарий |
|---|---|---|
| Массив строк | ["MALE","FEMALE"] | Подходит для перечней вариантов (enum) |
| Массив объектов | [{"value":"Иванов","data":{...}}, {...}] | Часто используется в ответах API |
JSON vs XML
В SOAP обычно применяют XML, а в REST — чаще JSON. Причины популярности JSON:
- меньший объём данных (нет парных тегов, повторяющих названия полей);
- лучше читаем людьми, особенно при небольших нагрузках или работе в Postman;
- широкая поддержка в современных языках и фреймворках.
| Критерий | JSON (оценка 1–5) | XML (оценка 1–5) |
|---|---|---|
| Читаемость | 5 | 3 |
| Размер передачи | 5 | 2 |
| Поддержка сложных схем | 4 | 5 |
| Стандартизация в REST | 5 | 3 |
Well Formed JSON (синтаксическая корректность)
Для корректной работы парсеров и серверов JSON должен быть well formed — синтаксически правильным. Рекомендую сверяться с описанием в RFC при глубоком изучении, а для повседневной валидации — использовать валидаторы (например, w3schools или популярные JSONLint) и инструменты вроде встроенного валидатора в Postman.
Коротко: основные правила:
- Данные в объекте записываются парами "ключ": значение;
- Пары и элементы массива разделяются запятыми;
- Объект — внутри фигурных скобок { };
- Массив — внутри квадратных скобок [ ].
1. Пары "ключ:значение"
В JSON ключ обязателен и должен быть в кавычках: "name":"Ольга". Учтите, что валидный JSON может быть не только объектом, но и одним значением, например просто числом 123 или строкой "Ольга".
2. Запятые между элементами
Частые ошибки при ручном редактировании JSON — лишняя запятая в конце объекта или её отсутствие между полями. Например,
Неправильно:
{
"query":"Виктор Иван",
"count":7,
}
Правильно:
{
"query":"Виктор Иван",
"count":7
}
При добавлении поля через копипаст легко оставить лишнюю запятую — это частая причина ошибок в тестах.
3. Фигурные скобки для объектов
Если система ожидает объект, она будет искать фигурные скобки. Ошибки: отсутствие одной из скобок или попытка передать объект в виде массива.
4. Квадратные скобки для массивов
Если система ожидает массив, используйте [ ]. Замена запятых на другой разделитель или попытка передать массив как объект приведёт к ошибке парсинга.
Итого
JSON (JavaScript Object Notation) — текстовый, человеко‑ и машиночитаемый формат обмена данными, широко используемый в REST API. Основные сущности: объект (пары ключ:значение) и массив (упорядоченный список значений). В JSON нет комментариев — это важно помнить при составлении примеров в Postman.
| Понятие | Описание | Пример |
|---|---|---|
| Объект | Неупорядоченное множество пар "ключ:значение" | { "name":"Ольга", "age":30 } |
| Массив | Упорядоченный набор значений | [1,2,3] или ["a","b"] |
| Литералы | true, false, null | null |
Советы и интересные факты о JSON
- Валидация перед отправкой: всегда прогоняйте JSON через валидатор (Postman, JSONLint, w3schools), особенно при динамической генерации тела запроса.
- Минификация: для тестов нагрузки отправляйте минимизированный JSON — это уменьшит трафик и повлияет на время отклика.
- Тесты на нечёткие типы: попробуйте передать числа как строки и наоборот — некоторые API имеют строгую типизацию и выдадут понятную ошибку, другие — попытаются привести типы.
- Перестановка ключей: убедитесь, что сервер не зависит от порядка ключей — это логическая ошибка в реализации API.
- Логи и F12: при отладке GUI используйте вкладку Network в браузере — часто запросы в примерах документации видны именно там.
Часто задаваемые вопросы
Как отличить JSON от JavaScript-объекта?
JSON — это текстовый формат с строгими правилами (ключи в кавычках, нет комментариев). JavaScript-объект в коде допускает идентификаторы без кавычек и может содержать функции.
Можно ли использовать комментарии в JSON?
Нет. В стандарте JSON комментарии отсутствуют. Для заметок используйте документацию или отдельные поля, но не в теле запроса.
Что делать, если сервер возвращает ошибку парсинга JSON?
Проверить валидность JSON: кавычки у ключей, запятые, скобки. Использовать валидатор и смотреть raw-тело запроса в инструментах разработчика или Postman.
Почему некоторые API возвращают массив в корне, а другие — объект?
Это выбор архитектуры API: массив подходит для списка сущностей, объект — для ответов с метаданными (пагинация, статус и т.д.).
