fundo
Estou fazendo algumas experiências com o Node.js e gostaria de ler um objeto JSON, de um arquivo de texto ou de um arquivo .js (o que é melhor?) Na memória para que eu possa acessar esse objeto rapidamente a partir do código. Eu percebo que existem coisas como Mongo, Alfred, etc, por aí, mas não é isso que eu preciso agora.
Questão
Como leio um objeto JSON de um arquivo de texto ou js e na memória do servidor usando JavaScript / Node?
javascript
json
node.js
Matt Cashatt
fonte
fonte
Respostas:
Sincronizar:
Assíncrono:
fonte
let imported = require("file.json")
. (2) JSON.parse deve ser assíncrono, porque usei esse código para carregar um arquivo JSON de 70 MB na memória como um objeto. Leva milissegundos dessa maneira, mas se eu usá-require()
lo, ele chugs .require
. Basta usarlet data = require('./yourjsonfile.json')
e pronto (com a nota de livro que, se o desempenho de require estiver afetando seu código, você terá problemas muito além de "querer carregar um arquivo .json")A maneira mais fácil que encontrei para fazer isso é usar
require
e o caminho para o seu arquivo JSON.Por exemplo, suponha que você tenha o seguinte arquivo JSON.
test.json
Em seguida, você pode carregá-lo facilmente no aplicativo node.js. usando
require
fonte
require
no nó é executado de forma síncrona. Mergulhe nas profundezas aquitest.json
seria diferente do exemplo dele. Estou usandonode 5.0
require
ele executaria esse código? Nesse caso, você realmente precisa controlar de onde vêm os arquivos json ou um invasor pode executar códigos maliciosos em sua máquina.Assíncrono está lá por uma razão! Joga pedra em @mihai
Caso contrário, aqui está o código que ele usou com a versão assíncrona:
fonte
Pelo menos no Node v8.9.1, você pode simplesmente fazer
var json_data = require('/path/to/local/file.json');
e acesse todos os elementos do objeto JSON.
fonte
file.json
após a nova solicitação (sem reiniciar o programa) serão do primeiro carregamento. Eu não tenho fonte para fazer isso, mas eu tinha isso em aplicativo que estou construindoNo Nó 8, você pode usar o built-in
util.promisify()
para ler assincronamente um arquivo como estefonte
.readFile
já é assíncrono, se você está procurando a versão de sincronização, o nome é.readFileSync
.fs/promises
nó 10. Nota: a API é experimental: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
é assíncrono , mas nãoasync
. Ou seja, a função não é definida comasync
palavras-chave, nem voltar a Promise, então você não pode fazerawait fs.readFile('whatever.json');
usando node-fs-extra (espera assíncrona)
fonte
Usar o pacote fs-extra é bastante simples:
Sincronizar:
Assíncrono:
fonte
fonte
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
Você pode encontrar todo o uso do Node.js nos documentos do sistema de arquivos!
espero que esta ajuda para você!
fonte
Tantas respostas, e ninguém nunca fez um benchmark para comparar sincronização versus async vs exigir. Descrevi a diferença nos casos de uso da leitura de json na memória via require, readFileSync e readFile aqui .
fonte
Se você estiver procurando uma solução completa para
Async
carregar um arquivo JSON a partir doRelative Path
Tratamento de ErrosEstrutura de Diretórios:
fonte