Исправление ошибки unexpected end of json input в JavaScript

Большинство приложений JavaScript используют формат JSON для взаимодействия друг с другом. Таким образом, синтаксический анализ JSON стал более распространенным явлением, чем когда-либо. Однако эта задача не всегда выполняется должным образом, что приводит к ошибкам "неожиданного завершения ввода JSON". В этой статье показано, как исправить эту ошибку.

"unexpected end of json input" - это популярная ошибка JavaScript, вызываемая функцией JSON.parse(). Ошибка возникает, когда ваш код пытается выполнить синтаксический анализ:

  • Пустая строка
  • Пустой массив
  • Некорректно сформированная строка в формате JSON

Ошибка указывает на то, что приложение не может использовать некоторый JSON, поскольку он недоступен для анализа или неправильно сформирован. Узнайте больше о том, как читать и записывать JSON в JavaScript.

Исправление unexpected end of json input в JavaScript

В большинстве случаев веб-приложение JavaScript обрабатывает данные JSON, либо считывая их из локального файла, такого как файл конфигурации, либо извлекая их с веб-сервера, как правило, с помощью вызова API. Посмотрите, как устранить ошибку "unexpected end of json input" в обоих сценариях!

Локальные данные в формате JSON

Предположим, вы пытаетесь прочитать локальный файл config.json в Node.js и проанализировать его содержимое с помощью JSON.parse():

const configFile = fs.readFileSync("config.json", "utf-8");
const config = JSON.parse(configFile);

Или, что эквивалентно, вы импортируете файл напрямую:

const config = require("./config.json");
// for Node.js ESM users:
// import config from "./config.json" with { type: "json" };

Не забывайте, что Node.js позволяет импортировать файл JSON напрямую с помощью require() - или с помощью импорта в приложениях ESM. За кулисами приложение автоматически преобразует содержимое JSON в объект JavaScript с помощью JSON.parse().

Та же логика применима к интерфейсным приложениям, использующим пакет, подобный Webpack. В этом случае синтаксис для импорта JSON непосредственно из файла следующий:

import config from "./config.json";

Чтобы избежать ошибки "unexpected end of json input", убедитесь, что ваш локальный JSON-файл содержит допустимый JSON. Рекомендуемый способ сделать это - открыть файл, скопировать его содержимое и вставить в онлайн-сервис редактирования JSON, такой как JSONLint:

Как вы можете видеть, этот инструмент указывает, является ли JSON допустимым, а если нет, то где он содержит недопустимые данные.

Обратите внимание, что этот подход также работает с пустыми строками, так как пустая строка не является допустимым JSON:

Удаленные данные в формате JSON

Если удаленная конечная точка возвращает неверный JSON, вы столкнетесь с ошибкой "unexpected end of json input":

  1. Вручную, при анализе данных ответа с помощью JSON.parse()
  2. Напрямую, если ваш HTTP-клиент автоматически анализирует ответ для вас

Если вы не контролируете ответ сервера, вы ничего не сможете сделать в этом случае. Рекомендуется обернуть вызов API блоком try...catch, чтобы корректно обработать ошибку.:

try {
  // make an API request
  const response = await fetch("https://example.com/api/v1/users");
  // parse the response as JSON (uses JSON.parse() behind the scenes)
  const data = await response.json();
  // handle the response data...
} catch (error) {
  console.error("Error while fetching data:", error);
}

Таким образом, проблема с синтаксическим анализом JSON не приведет к сбою всего вашего приложения. Кроме того, вам следует зарегистрировать ошибку, чтобы убедиться, что данные ответа содержат недопустимый JSON. Если это так, сообщите о проблеме серверной команде.

Часто задаваемые вопросы

Может ли "unexpected end of json input" произойти как в Node.js, так и в браузере?

Да, синтаксический анализ JSON на JavaScript возможен как во внутреннем, так и во внешнем интерфейсе, будь то из локальных файлов или удаленных ответов.

Возможно ли автоматически исправить неработающий JSON в JavaScript?

Да, путем передачи поврежденных данных JSON в библиотеки автоматического восстановления JSON, такие как jsonrepair, json-fixer или jsonfix.

Вывод

Следуя подходам, описанным в этой статье, вы можете исправить ошибку "unexpected end of json input" при работе с локальными и удаленными данными JSON.