Содержание статьи

JSON является стандартным форматом обмена данными между клиентом и сервером. В JavaScript для получения JSON чаще всего используется функция fetch, которая возвращает промис. Основная задача – корректно обработать промис и преобразовать ответ в объект через response.json().
Для синхронной обработки запросов применяются конструкции async/await, которые позволяют писать код в линейном стиле без цепочек .then(). При этом важно оборачивать вызовы в блоки try/catch, чтобы перехватывать сетевые ошибки и ошибки парсинга JSON.
Если проект использует старые браузеры или требуется поддержка без fetch, можно применять XMLHttpRequest. В этом случае JSON разбирается через JSON.parse, а ошибки обработки нужно контролировать вручную.
При отправке POST-запросов сервер может ожидать заголовок Content-Type: application/json и тело запроса в формате JSON. Это позволяет сразу получать ответ в JSON, минимизируя ручную обработку данных.
Для отладки JSON удобно использовать console.log на каждом этапе: до парсинга, после получения объекта и перед дальнейшей обработкой. Это помогает выявить неправильный формат ответа или неожиданные структуры данных.
Использование fetch для получения JSON с сервера

Функция fetch позволяет отправлять HTTP-запросы и получать ответы в формате JSON. Для этого вызывают fetch(url) и обрабатывают промис методом then, вызывая response.json() для преобразования ответа в объект JavaScript.
Важно проверять статус ответа через response.ok и response.status, чтобы убедиться, что сервер вернул успешный код, например 200. В случае ошибки можно выбросить исключение и обработать его в блоке catch.
Для передачи параметров запроса, таких как метод, заголовки или тело, используют объект опций. Например, { method: ‘GET’, headers: { ‘Accept’: ‘application/json’ } } гарантирует, что сервер вернет JSON.
Если требуется обработка большого объема данных, полезно добавлять проверку размера ответа и использовать response.clone() для многократного чтения потока без потери данных.
Для асинхронного кода предпочтительно применять async/await, что позволяет писать обработку ответа линейно: const response = await fetch(url); const data = await response.json(); При этом try/catch защищает от сетевых ошибок и некорректного JSON.
Обработка промисов и ошибок при fetch

Метод fetch возвращает промис, который разрешается объектом Response. Для корректной обработки необходимо:
- Проверять response.ok и response.status, чтобы убедиться, что сервер вернул успешный код.
- Использовать response.json() для преобразования тела ответа в объект JavaScript.
- Обрабатывать ошибки сети через блок catch, включая таймауты и недоступность сервера.
Пример стандартной обработки промиса:
- Вызываем fetch(url) с необходимыми заголовками.
- Проверяем response.ok и выбрасываем исключение при ошибке.
- Применяем response.json() для получения объекта.
- В catch фиксируем сетевые ошибки или некорректный JSON.
Для асинхронного подхода используют async/await с try/catch, что упрощает код и позволяет сразу работать с данными, например:
- try { const response = await fetch(url); if (!response.ok) throw new Error(response.status); const data = await response.json(); }
- catch (error) { console.error(‘Ошибка запроса или парсинга:’, error); }
Получение JSON с помощью XMLHttpRequest
Для старых браузеров или проектов без fetch используют XMLHttpRequest. Создают объект xhr = new XMLHttpRequest() и открывают соединение методом xhr.open(‘GET’, url, true).
Перед отправкой запроса можно указать заголовки через xhr.setRequestHeader(‘Accept’, ‘application/json’), чтобы сервер вернул JSON.
Обработку ответа выполняют в обработчике xhr.onreadystatechange. Проверяют xhr.readyState === 4 и xhr.status === 200, после чего вызывают JSON.parse(xhr.responseText) для преобразования строки в объект.
Для обработки ошибок используют событие xhr.onerror, а также проверку кода статуса, чтобы отлавливать сетевые сбои и некорректные ответы.
Пример структуры кода:
const xhr = new XMLHttpRequest();
xhr.open(‘GET’, url, true);
xhr.setRequestHeader(‘Accept’, ‘application/json’);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
const data = JSON.parse(xhr.responseText);
console.log(data);
} else {
console.error(‘Ошибка статуса:’, xhr.status);
}
}
};
xhr.onerror = function() { console.error(‘Сетевая ошибка’); };
xhr.send();
Разбор JSON строки через JSON.parse

Метод JSON.parse преобразует строку в формате JSON в объект JavaScript. Строка должна быть корректно сформирована: ключи в кавычках, значения допустимых типов (число, строка, массив, объект, true, false, null).
Для защиты от некорректного формата используют блок try/catch, чтобы отлавливать исключения SyntaxError, возникающие при ошибках парсинга.
Пример безопасного разбора строки:
try {
const data = JSON.parse(jsonString);
console.log(data);
} catch (error) {
console.error(‘Ошибка парсинга JSON:’, error);
}
Если требуется преобразовать отдельные значения при разборе, можно использовать второй параметр reviver – функцию, которая применяется к каждому ключу и значению.
Для больших JSON-строк полезно проверять тип входных данных и при необходимости использовать typeof jsonString === ‘string’ перед вызовом JSON.parse.
Отправка запроса с заголовком Accept: application/json
Заголовок Accept: application/json сообщает серверу, что клиент ожидает ответ в формате JSON. Его важно указывать для правильного формирования ответа, особенно если сервер поддерживает несколько форматов.
В JavaScript заголовок можно передать через fetch или XMLHttpRequest:
| Метод | Пример |
|---|---|
| fetch | fetch(url, { method: ‘GET’, headers: { ‘Accept’: ‘application/json’ } }) |
| XMLHttpRequest | xhr.setRequestHeader(‘Accept’, ‘application/json’) |
Рекомендуется проверять, что сервер действительно возвращает JSON, проверяя response.headers.get(‘Content-Type’) для fetch или xhr.getResponseHeader(‘Content-Type’) для XMLHttpRequest.
Если сервер не поддерживает заголовок Accept, можно получить ответ в другом формате. В таких случаях следует использовать try/catch при разборе JSON, чтобы избежать ошибок JSON.parse.
Получение JSON с использованием async/await
Конструкция async/await упрощает работу с промисами, позволяя писать асинхронный код в линейном виде. Для получения JSON с помощью fetch создают асинхронную функцию и используют await перед вызовами fetch и response.json().
Важно оборачивать вызовы в блок try/catch для перехвата сетевых ошибок и некорректного JSON:
async function getData(url) {
try {
const response = await fetch(url, { headers: { ‘Accept’: ‘application/json’ } });
if (!response.ok) throw new Error(response.status);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(‘Ошибка запроса или парсинга JSON:’, error);
}
}
Для больших JSON-объектов рекомендуется проверять заголовок Content-Type перед разбором, чтобы убедиться, что сервер вернул корректный JSON. Также полезно использовать таймауты для предотвращения зависания при долгих ответах сервера.
Работа с JSON при POST-запросах
При отправке данных на сервер методом POST важно указывать заголовок Content-Type: application/json и передавать тело запроса в формате JSON с помощью JSON.stringify.
- Создание тела запроса: const body = JSON.stringify({ key: ‘value’ });
- Передача заголовков: { ‘Content-Type’: ‘application/json’, ‘Accept’: ‘application/json’ }
- Использование fetch с методом POST:
fetch(url, {
method: ‘POST’,
headers: { ‘Content-Type’: ‘application/json’, ‘Accept’: ‘application/json’ },
body: body
});
Для асинхронной обработки ответа применяют async/await и response.json(). Важно проверять response.ok и обрабатывать ошибки через try/catch:
- Отправка POST-запроса с JSON телом.
- Проверка статуса ответа сервера.
- Разбор JSON через response.json().
- Обработка исключений сети или некорректного JSON.
Для повторного использования данных удобно сохранять тело запроса в переменной и при необходимости клонировать его, чтобы избежать повторного сериализования.
Для улучшения читаемости используют console.table при работе с массивами объектов, что позволяет увидеть данные в табличном виде с ключами и значениями.
Пример проверки полученного JSON:
fetch(url)
.then(response => response.json())
.then(data => {
console.log(‘Полученные данные:’, data);
console.table(data);
})
.catch(error => console.error(‘Ошибка запроса или парсинга:’, error));
Также рекомендуется проверять типы данных и наличие ключей с помощью typeof и Object.keys, чтобы убедиться, что JSON соответствует ожидаемой структуре перед использованием в коде.
Вопрос-ответ:
Как использовать fetch для получения JSON ответа с сервера?
Для получения JSON с помощью fetch вызывают fetch(url) и обрабатывают промис. После получения ответа проверяют response.ok и преобразуют тело через response.json(). Для защиты от ошибок сети или некорректного JSON используют блок catch или async/await с try/catch.
В чем отличие получения JSON через fetch и XMLHttpRequest?
fetch работает с промисами и позволяет использовать async/await, упрощая асинхронный код. XMLHttpRequest поддерживается во всех браузерах, но требует ручной проверки readyState и status. Разбор JSON в обоих случаях выполняется через JSON.parse или response.json().
Как правильно обрабатывать ошибки при fetch?
Необходимо проверять статус ответа через response.ok или response.status. Ошибки сети и некорректный JSON обрабатываются в блоке catch. При использовании async/await запрос оборачивают в try/catch, чтобы перехватить исключения и логировать их для анализа.
Зачем указывать заголовок Accept: application/json?
Заголовок Accept: application/json сообщает серверу, что клиент ожидает ответ в формате JSON. Это предотвращает получение данных в других форматах, особенно если сервер поддерживает несколько типов ответов. Заголовок указывается в fetch через headers или в XMLHttpRequest через setRequestHeader.
Как безопасно преобразовать строку JSON в объект JavaScript?
Для преобразования используют JSON.parse. Чтобы избежать ошибок при некорректной строке, оборачивают вызов в try/catch. Можно дополнительно проверять тип входных данных через typeof и использовать параметр reviver, если требуется изменить или фильтровать значения во время парсинга.
Как получить JSON ответ с сервера и обработать его в JavaScript без ошибок?
Для получения JSON используют функцию fetch или XMLHttpRequest. С fetch делают запрос: fetch(url, { headers: { ‘Accept’: ‘application/json’ } }), затем проверяют response.ok и преобразуют ответ через response.json(). Для обработки ошибок сети и некорректного JSON применяют try/catch при использовании async/await или catch при промисах. С XMLHttpRequest проверяют readyState === 4 и status === 200, после чего разбирают xhr.responseText через JSON.parse. Для отладки полезно выводить данные в консоль через console.log или console.table, а перед разбором проверять тип и структуру ответа.
