856 votes

À l'aide de Node.JS, comment lire un fichier JSON dans la mémoire (serveur) ?

Arrière-plan

Je fais quelques expériences avec Node.js et j'aimerais lire un objet JSON, à partir d'un fichier texte ou d'un fichier .js (ce qui est mieux ??) en mémoire afin que je puisse accéder rapidement à cet objet à partir du code. Je me rends compte qu'il y a des choses comme Mongo, Alfred, etc., mais ce n'est pas ce dont j'ai besoin en ce moment.

Question

Comment lire un objet JSON à partir d'un fichier texte ou js et dans la mémoire du serveur à l'aide de JavaScript/Node ?

1556voto

mihai Points 7035

Synchroniser :

 var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));

Async :

 var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
});

495voto

Travis Tidwell Points 31

Le moyen le plus simple que j'ai trouvé pour le faire est d'utiliser simplement require et le chemin d'accès à votre fichier JSON.

Par exemple, supposons que vous ayez le fichier JSON suivant.

test.json

 {
  "firstName": "Joe",
  "lastName": "Smith"
}

Vous pouvez ensuite facilement le charger dans votre application node.js en utilisant require

 var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);

62voto

Florian Margaine Points 16927

L'asynchrone est là pour une raison ! Jette la pierre à @mihai

Sinon, voici le code qu'il a utilisé avec la version asynchrone :

 // 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
}

57voto

Feynman Points 599

Au moins dans Node v8.9.1, vous pouvez simplement faire

var json_data = require('/path/to/local/file.json');

et accéder à tous les éléments de l'objet JSON.

20voto

J P Points 727

Dans Node 8, vous pouvez utiliser le util.promisify() intégré pour lire de manière asynchrone un fichier comme celui-ci

 const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)

readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'})
  .then(contents => {
    const obj = JSON.parse(contents)
    console.log(obj)
  })
  .catch(error => {
    throw error
  })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X