8

Как прочитать JSON-файл в память сервера?

3

Я занимаюсь экспериментами с Node.js и хотел бы прочитать JSON-объект из текстового файла или .js файла (что из этого лучше??) в память, чтобы я мог быстро получать доступ к этому объекту из кода. Я понимаю, что существуют такие решения, как Mongo, Alfred и т.д., но сейчас это не то, что мне нужно.

Как прочитать JSON-объект из текстового файла или .js файла и загрузить его в память сервера, используя JavaScript/Node?

5 ответ(ов)

15

Конечно!

Вы можете использовать синхронный и асинхронный методы для чтения файла и парсинга 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.

5

Самый простой способ, который я нашел для решения этой задачи, — использовать функцию require с путем к вашему JSON-файлу.

Например, допустим, у вас есть следующий JSON-файл:

test.json

{
  "firstName": "Joe",
  "lastName": "Smith"
}

Вы можете легко загрузить его в ваше приложение на Node.js, использовав require:

var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);

Таким образом, вы сможете получить доступ к значениям из JSON-файла непосредственно в вашем коде.

0

Ответ на 2022 год, с использованием синтаксиса модулей ES6 и async/await

В современном JavaScript это можно сделать в одну строку, без необходимости устанавливать дополнительные пакеты:

import { readFile } from 'fs/promises';

let data = JSON.parse(await readFile("filename.json", "utf8"));

Не забудьте добавить блок try/catch, чтобы обрабатывать исключения по мере необходимости.

0

Асинхронность присутствует не просто так! Бросает камень в @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 операциями, такими как чтение файлов.

0

В версии Node v8.9.1 можно просто использовать следующую команду:

var json_data = require('/path/to/local/file.json');

После этого вы сможете получить доступ ко всем элементам объекта JSON.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь