Фон
Я делаю некоторые эксперименты с Node.js и хотел бы прочитать объект JSON, либо из текстового файла, либо из файла .js (что лучше ??) в память, чтобы я мог быстро получить доступ к этому объекту из кода. Я понимаю, что есть такие вещи, как Монго, Альфред и т. Д., Но это не то, что мне сейчас нужно.
Вопрос
Как я могу прочитать объект JSON из текстового или js-файла и в память сервера, используя JavaScript / Node?
javascript
json
node.js
Мэтт Кашатт
источник
источник
Ответы:
Синхронизация:
асинхронный:
источник
let imported = require("file.json")
. (2) JSON.parse должен быть асинхронным, потому что я использовал этот код для загрузки 70-мегабайтного файла JSON в память как объекта. Это занимает миллисекунды таким образом, но если я используюrequire()
, это пыхтит .require
, причем этот ответ больше не применим, если вы просто хотите загрузить файл json. Просто пользуйтесьlet data = require('./yourjsonfile.json')
и уходите (с примечанием, что, если производительность require влияет на ваш код, у вас возникают проблемы, выходящие за рамки «желания загрузить файл .json»)Самый простой способ, который я нашел, - это просто использовать
require
путь к файлу JSON.Например, предположим, у вас есть следующий файл JSON.
test.json
Затем вы можете легко загрузить это в ваше приложение node.js, используя
require
источник
require
в узле работает синхронно. Погрузитесь глубоко здесьtest.json
будет отличаться от его примера. Я используюnode 5.0
require
он запускать этот код? Если это так, то вам действительно нужно контролировать, откуда приходят ваши файлы json, или злоумышленник может запустить вредоносный код на вашем компьютере.Асинхронный есть причина! Бросает камень в @mihai
Иначе, вот код, который он использовал с асинхронной версией:
источник
По крайней мере, в Node v8.9.1 вы можете просто сделать
var json_data = require('/path/to/local/file.json');
и получить доступ ко всем элементам объекта JSON.
источник
file.json
после нового требования (без перезапуска программы) данные будут с первой загрузки. У меня нет источника, чтобы поддержать это, но у меня было это в приложении, которое я строюВ Node 8 вы можете использовать встроенный
util.promisify()
модуль для асинхронного чтения файла, подобного этомуисточник
.readFile
уже асинхронный, если вы ищете версию синхронизации, его имя.readFileSync
.fs/promises
к узлу 10. Примечание: API является экспериментальным: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
является асинхронным , но неasync
. Это означает, что функция не определена сasync
ключевым словом и не возвращает обещание, поэтому вы не можете этого сделатьawait fs.readFile('whatever.json');
использование node-fs-extra (асинхронное ожидание)
источник
Использовать пакет fs-extra довольно просто:
Синхронизация:
асинхронный:
источник
источник
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfile_file_options_callback
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfilesync_file_options
Вы можете найти все случаи использования Node.js в документации по файловой системе!
надеюсь, это поможет вам!
источник
Так много ответов, и никто никогда не делал эталонов для сравнения синхронизации с асинхронной и требуемой. Я описал разницу в случаях использования чтения json в памяти через require, readFileSync и readFile здесь .
источник
Если вы ищете полное решение для
Async
загрузки файла JSON изRelative Path
с Обработка ошибокСтруктура каталогов:
источник