Antecedentes
Estoy experimentando con Node.js y me gustaría leer un objeto JSON, ya sea desde un archivo de texto o un archivo .js (¿cuál es mejor?) En la memoria para poder acceder a ese objeto rápidamente desde el código. Me doy cuenta de que hay cosas como Mongo, Alfred, etc., pero eso no es lo que necesito en este momento.
Pregunta
¿Cómo leo un objeto JSON de un archivo de texto o js y en la memoria del servidor usando JavaScript / Node?
javascript
json
node.js
Matt Cashatt
fuente
fuente
Respuestas:
Sincronización:
Asíncrono:
fuente
let imported = require("file.json")
. (2) JSON.parse debe ser asíncrono, porque utilicé este código para cargar un archivo JSON de 70mb en la memoria como un objeto. Lleva milisegundos de esta manera, pero si lo usorequire()
, funciona .require
, con esta respuesta ya no es aplicable si solo desea cargar un archivo json. Simplemente utilícelolet data = require('./yourjsonfile.json')
y listo (con la nota de libro de que si el rendimiento de require está afectando su código, tiene problemas mucho más allá de "querer cargar un archivo .json")La forma más fácil que he encontrado para hacer esto es simplemente usar
require
y la ruta a su archivo JSON.Por ejemplo, suponga que tiene el siguiente archivo JSON.
test.json
Luego puede cargar esto fácilmente en su aplicación node.js usando
require
fuente
require
en el nodo se ejecuta sincrónicamente. Sumérgete en lo profundo aquítest.json
sea diferente de su ejemplo. Estoy usandonode 5.0
require
ejecutaría ese código? Si es así, realmente necesita controlar de dónde provienen sus archivos json o un atacante podría ejecutar código malicioso en su máquina.Asíncrono está ahí por una razón! Lanza piedra a @mihai
De lo contrario, aquí está el código que utilizó con la versión asincrónica:
fuente
Al menos en el Nodo v8.9.1, solo puedes hacer
var json_data = require('/path/to/local/file.json');
y acceder a todos los elementos del objeto JSON.
fuente
file.json
requeridos después de nuevo (sin reiniciar el programa), los datos serán de la primera carga. No tengo fuente para respaldar esto, pero tenía esto en la aplicación que estoy construyendoEn el Nodo 8, puede usar el incorporado
util.promisify()
para leer asíncronamente un archivo como estefuente
.readFile
ya es asíncrono, si está buscando la versión de sincronización, su nombre es.readFileSync
.fs/promises
partir del Nodo 10. Nota: la API es experimental: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
es asíncrono , pero noasync
. Es decir, la función no está definida con laasync
palabra clave, ni devuelve una Promesa, por lo que no puede hacerloawait fs.readFile('whatever.json');
usando node-fs-extra (espera asíncrona)
fuente
Usar el paquete fs-extra es bastante simple:
Sincronización:
Asíncrono:
fuente
fuente
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
¡Puede encontrar todo el uso de Node.js en los documentos del Sistema de archivos!
Espero que esta ayuda para ti!
fuente
Tantas respuestas, y nadie jamás hizo un punto de referencia para comparar sincronización vs asíncrono vs requerimiento. Describí la diferencia en los casos de uso de leer json en la memoria a través de require, readFileSync y readFile aquí .
fuente
Si está buscando una solución completa para
Async
cargar un archivo JSONRelative Path
con Manejo de erroresEstructura de directorios:
fuente