Usando Node.JS, ¿cómo leo un archivo JSON en la memoria (del servidor)?

Resuelto Matt Cashatt asked hace 12 años • 13 respuestas

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?

Matt Cashatt avatar Apr 04 '12 19:04 Matt Cashatt
Aceptado

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);
});
mihai avatar Apr 04 '2012 12:04 mihai

La forma más sencilla que he encontrado para hacer esto es simplemente usar requirey 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);
Travis Tidwell avatar Oct 19 '2014 02:10 Travis Tidwell

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/catchbloque para manejar excepciones según sea necesario.

Florian Ledermann avatar Mar 12 '2021 15:03 Florian Ledermann

¡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
}
Florian Margaine avatar Apr 04 '2012 12:04 Florian Margaine

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.

Alex Eftimiades avatar Nov 11 '2017 03:11 Alex Eftimiades