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 Также в библиотеке
Отправка email на Kotlin: библиотеки и примеры кода
CLI фреймворк для JavaScript (Node.js): Commander.js – создание консольных приложений
PHP-DI для PHP: полное руководство с примерами
GraphQL Java — серверная библиотека для реализации GraphQL API на Java