Как прочитать и записать JSON-файл в Node.js
Короткий ответ
Прочитайте файл как строку и разберите через JSON.parse():
import { readFile, writeFile } from 'node:fs/promises';
await writeFile('settings.json', '{"theme":"dark","fontSize":14}');
const settings = JSON.parse(await readFile('settings.json', 'utf8'));
console.log(settings.theme, settings.fontSize);Результат:
dark 14Запись
JSON.stringify() с отступом 2 делает файл читаемым:
import { readFile, writeFile } from 'node:fs/promises';
const settings = { theme: 'light', languages: ['en', 'de'] };
await writeFile('settings.json', JSON.stringify(settings, null, 2));
console.log(await readFile('settings.json', 'utf8'));Результат:
{
"theme": "light",
"languages": [
"en",
"de"
]
}Изменить значение
Прочитайте, измените и запишите обратно:
import { readFile, writeFile } from 'node:fs/promises';
await writeFile('counter.json', '{"visits":41}');
const data = JSON.parse(await readFile('counter.json', 'utf8'));
data.visits++;
await writeFile('counter.json', JSON.stringify(data));
console.log(await readFile('counter.json', 'utf8'));Результат:
{"visits":42}Частая ошибка
Из-за повреждённого файла JSON.parse() выбрасывает ошибку. Перехватите её и используйте значения по умолчанию:
import { readFile, writeFile } from 'node:fs/promises';
await writeFile('broken.json', '{"theme": "dark",}');
let settings;
try {
settings = JSON.parse(await readFile('broken.json', 'utf8'));
} catch (error) {
console.log('Broken file:', error.name);
settings = { theme: 'light' };
}
console.log(settings.theme);Результат:
Broken file: SyntaxError
lightФункции из этого ответа
- JSON.parse — Разбирает строку JSON и возвращает значение.
- JSON.stringify — Преобразует значение в строку в формате JSON.