Урок 3 из 8 · 20 мин · обновлено

JSON: как читать ответ сервера

Что такое JSON, из чего он состоит: объекты, массивы, строки, числа, true, false и null. Как читать вложенные данные и находить нужное поле в ответе API.

Формат, на котором говорят API

Почти все современные API отправляют и принимают данные в формате JSON (JavaScript Object Notation). Это обычный текст, который легко читать и людям, и программам. Вот ответ учебного API на запрос GET https://dummyjson.com/products/1?select=title,price:

JSON
{
  "id": 1,
  "title": "Essence Mascara Lash Princess",
  "price": 9.99
}

Параметр select попросил сервер вернуть только нужные поля, без него ответ гораздо длиннее.

Объекты и значения

Объект — набор пар «ключ: значение» в фигурных скобках:

  • ключ — название поля, всегда в двойных кавычках: "title";
  • после ключа — двоеточие и значение;
  • пары разделяются запятыми. После последней пары запятой нет.

Значения бывают разных типов:

Тип Пример Что значит
строка "Essence Mascara" текст, в двойных кавычках
число 9.99, 194 без кавычек, дробная часть через точку
логическое true, false да или нет
пусто null значения нет
объект {"city": "Москва"} вложенный набор полей
массив ["beauty", "mascara"] список

Тип важен. Если поле price должно быть числом, а приходит строка "9.99", приложение может не посчитать сумму корзины. Такие расхождения — частая находка при тестировании API.

Массивы и вложенность

Массив — список значений в квадратных скобках. Ответ на поиск GET https://dummyjson.com/products/search?q=phone&limit=2&select=title,price:

JSON
{
  "products": [
    { "id": 101, "title": "Apple AirPods Max Silver", "price": 549.99 },
    { "id": 104, "title": "Apple iPhone Charger", "price": 19.99 }
  ],
  "total": 23,
  "skip": 0,
  "limit": 2
}
  • products — массив объектов-товаров;
  • total — сколько всего найдено: 23, хотя прислали только 2;
  • skip и limit — постраничная выдача: пропустить 0, вернуть 2. Так API не отдают тысячи записей за раз.

До нужного значения добираются по цепочке: products[0].title — это "Apple AirPods Max Silver". [0] — первый элемент массива: счёт начинается с нуля. Такая запись пригодится в уроке 7, когда будем проверять ответы автоматически.

Ошибки формата

Сервер не поймёт JSON с ошибкой и ответит кодом 400. Самые частые ошибки:

  • одинарные кавычки вместо двойных: {'title': 'Чай'};
  • запятая после последней пары: {"title": "Чай",};
  • ключ без кавычек: {title: "Чай"};
  • комментарии — в JSON их не бывает.

Postman подсвечивает такие ошибки красным, а длинный ответ показывает с отступами — вкладка Pretty.

Попробуйте сами. Откройте в браузере https://dummyjson.com/carts/1. Найдите: сколько разных товаров в корзине, название первого из них, общую сумму корзины и номер пользователя, которому она принадлежит.

Как искать

Корзина — объект. В нём:

  • products — массив товаров. Количество разных товаров — число элементов массива, оно же продублировано в поле totalProducts;
  • название первого товара — products[0].title;
  • общая сумма — поле total самой корзины, а сумма со скидкой — её discountedTotal. Не перепутайте: такие же поля есть у каждого товара внутри products, там это сумма по одной позиции;
  • пользователь — поле userId.

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

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Что в JSON записывают в квадратных скобках?

  2. В ответе "price": 9.99 и "price": "9.99". Есть ли разница?

  3. Как добраться до названия первого товара в ответе {"products": [{"title": "iPhone"}]}?