Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как прочитать и записать 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.