Как прочитать JSON-файл в память сервера?
Я занимаюсь экспериментами с Node.js и хотел бы прочитать JSON-объект из текстового файла или .js файла (что из этого лучше??) в память, чтобы я мог быстро получать доступ к этому объекту из кода. Я понимаю, что существуют такие решения, как Mongo, Alfred и т.д., но сейчас это не то, что мне нужно.
Как прочитать JSON-объект из текстового файла или .js файла и загрузить его в память сервера, используя JavaScript/Node?
5 ответ(ов)
Конечно!
Вы можете использовать синхронный и асинхронный методы для чтения файла и парсинга JSON в Node.js. Вот примеры кода:
Синхронный способ:
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
В этом коде мы используем fs.readFileSync
, который читает файл синхронно. Это блокирует выполнение кода до тех пор, пока файл не будет прочитан, после чего происходит парсинг JSON.
Асинхронный способ:
var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
if (err) throw err; // Проверяем наличие ошибки
obj = JSON.parse(data); // Парсим JSON только если ошибки нет
});
Здесь мы используем fs.readFile
, который читает файл асинхронно. Это не блокирует выполнение кода, и мы передаем коллбек для обработки результата чтения. Ошибка обрабатывается внутри коллбека, и только в случае успешного чтения (без ошибок) происходит парсинг JSON.
После этих примеров, вы можете выбрать подходящий подход в зависимости от ваших потребностей: синхронный будет проще, но может замедлить выполнение, а асинхронный - более эффективный для работы с I/O.
Самый простой способ, который я нашел для решения этой задачи, — использовать функцию require
с путем к вашему JSON-файлу.
Например, допустим, у вас есть следующий JSON-файл:
test.json
{
"firstName": "Joe",
"lastName": "Smith"
}
Вы можете легко загрузить его в ваше приложение на Node.js, использовав require
:
var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
Таким образом, вы сможете получить доступ к значениям из JSON-файла непосредственно в вашем коде.
Ответ на 2022 год, с использованием синтаксиса модулей ES6 и async/await
В современном JavaScript это можно сделать в одну строку, без необходимости устанавливать дополнительные пакеты:
import { readFile } from 'fs/promises';
let data = JSON.parse(await readFile("filename.json", "utf8"));
Не забудьте добавить блок try/catch
, чтобы обрабатывать исключения по мере необходимости.
Асинхронность присутствует не просто так! Бросает камень в @mihai
Вот код, который он использовал с асинхронной версией:
// Объявляем переменные
var fs = require('fs'),
obj
// Читаем файл и передаем в коллбек
fs.readFile('path/to/file', handleFile)
// Пишем функцию коллбек
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
// Теперь вы можете работать с вашими данными
}
Использование асинхронного подхода позволяет избежать блокировки основного потока выполнения, что особенно важно при работе с I/O операциями, такими как чтение файлов.
В версии Node v8.9.1 можно просто использовать следующую команду:
var json_data = require('/path/to/local/file.json');
После этого вы сможете получить доступ ко всем элементам объекта JSON.
Как разобрать JSON с помощью Node.js? [закрыто]
Как вывести циклическую структуру в формате, похожем на JSON?
Преобразование объекта JS в строку JSON
Как сравнить массивы в JavaScript?
Функция map для объектов (вместо массивов)