Usando Node.JS, ¿cómo leo un archivo JSON en la memoria (del servidor)?
Fondo
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 existen 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 lo coloco en la memoria del servidor usando JavaScript/Node?
Sincronización:
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
Asíncrono:
var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
});
La forma más sencilla que he encontrado para hacer esto es simplemente usar require
y la ruta a su archivo JSON.
Por ejemplo, supongamos que tiene el siguiente archivo JSON.
prueba.json
{
"firstName": "Joe",
"lastName": "Smith"
}
Luego puedes cargar esto fácilmente en tu aplicación node.js usandorequire
var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
Respuesta para 2022, usando la sintaxis del módulo ES6 y async/await
En JavaScript moderno, esto se puede hacer en una sola línea, sin necesidad de instalar paquetes adicionales:
import { readFile } from 'fs/promises';
let data = JSON.parse(await readFile("filename.json", "utf8"));
Agregue un try/catch
bloque para manejar excepciones según sea necesario.
¡La asincronía existe por una razón! Le tira piedra a @mihai
De lo contrario, aquí está el código que usó con la versión asincrónica:
// Declare variables
var fs = require('fs'),
obj
// Read the file and send to the callback
fs.readFile('path/to/file', handleFile)
// Write the callback function
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
// You can now play with your datas
}
Al menos en Node v8.9.1, puedes simplemente hacer
var json_data = require('/path/to/local/file.json');
y acceder a todos los elementos del objeto JSON.