JSON обработка в Node.js: полное руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

JSON обработка в Node.js: полное руководство

JSON (JavaScript Object Notation) — это легковесный формат обмена данными, основанный на синтаксисе объектов JavaScript. В среде Node.js работа с JSON является повседневной задачей: от конфигурационных файлов до API-запросов. В этой статье мы подробно разберём все аспекты обработки JSON, включая парсинг, сериализацию, валидацию и работу с большими файлами.

Базовые методы: JSON.parse() и JSON.stringify()

Два основных метода для работы с JSON встроены прямо в JavaScript. Они доступны глобально и не требуют установки дополнительных библиотек.

JSON.parse() — преобразование строки в объект

Метод JSON.parse() принимает строку JSON и возвращает соответствующий JavaScript-объект. Если строка содержит невалидный JSON, будет выброшено исключение SyntaxError.

const jsonString = '{"name": "Анна", "age": 28, "isStudent": false}';
const user = JSON.parse(jsonString);
console.log(user.name); // "Анна"
console.log(user.age);  // 28

Вторым необязательным параметром можно передать функцию-ревьювер, которая позволяет модифицировать значения в процессе парсинга:

const json = '{"year": "2024", "price": "1500.50"}';
const data = JSON.parse(json, (key, value) => {
  if (key === 'price') return parseFloat(value);
  if (key === 'year') return parseInt(value);
  return value;
});
console.log(typeof data.price); // "number"

JSON.stringify() — преобразование объекта в строку

Метод JSON.stringify() делает обратное: превращает объект или значение в строку JSON. Он принимает до трёх аргументов: значение, заменяющую функцию или массив ключей, и количество пробелов для форматирования.

const user = {
  name: "Иван",
  age: 32,
  skills: ["JS", "Node", "Python"]
};

// Без форматирования
console.log(JSON.stringify(user));
// {"name":"Иван","age":32,"skills":["JS","Node","Python"]}

// С форматированием (2 пробела)
console.log(JSON.stringify(user, null, 2));
/*
{
  "name": "Иван",
  "age": 32,
  "skills": [
    "JS",
    "Node",
    "Python"
  ]
}
*/

Второй аргумент может быть массивом ключей для фильтрации:

console.log(JSON.stringify(user, ['name', 'age']));
// {"name":"Иван","age":32}

Работа с JSON-файлами в Node.js

В Node.js часто требуется читать и записывать JSON-файлы. Для этого используются модули fs (file system).

Чтение JSON-файла

const fs = require('fs');

// Синхронное чтение
try {
  const data = fs.readFileSync('config.json', 'utf8');
  const config = JSON.parse(data);
  console.log(config.port);
} catch (err) {
  console.error('Ошибка чтения файла:', err.message);
}

// Асинхронное чтение
fs.readFile('config.json', 'utf8', (err, data) => {
  if (err) {
    console.error('Ошибка:', err);
    return;
  }
  const config = JSON.parse(data);
  console.log(config.port);
});

Запись JSON-файла

const fs = require('fs');

const settings = {
  theme: 'dark',
  language: 'ru',
  fontSize: 14
};

// Синхронная запись
fs.writeFileSync('settings.json', JSON.stringify(settings, null, 2));

// Асинхронная запись
fs.writeFile('settings.json', JSON.stringify(settings, null, 2), (err) => {
  if (err) console.error('Ошибка записи:', err);
  else console.log('Файл сохранён');
});

Валидация JSON

Перед использованием данных всегда стоит проверять их валидность. Простейший способ — обернуть JSON.parse() в try-catch. Для более сложной валидации структуры можно использовать библиотеки.

Проверка с try-catch

function safeJsonParse(str) {
  try {
    return { data: JSON.parse(str), error: null };
  } catch (e) {
    return { data: null, error: e.message };
  }
}

const result = safeJsonParse('{"valid": true}');
if (result.error) {
  console.error('Некорректный JSON:', result.error);
} else {
  console.log(result.data);
}

Валидация структуры с помощью библиотеки ajv

Библиотека ajv (Another JSON Schema Validator) позволяет проверять JSON-данные по заданной схеме. Установите её через npm:

npm install ajv
const Ajv = require('ajv');
const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type                    

Рекомендаций