web-dev-qa-db-fra.com

Avec Node.JS, comment lire un fichier JSON dans la mémoire (du serveur)?

Contexte

Je suis en train d'expérimenter 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, de manière à pouvoir accéder rapidement à cet objet à partir du code. Je réalise qu'il y a des choses comme Mongo, Alfred, etc., mais ce n'est pas ce dont j'ai besoin pour le 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?

530
Matt Cashatt

Sync:

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);
});
1069
mihai

Le moyen le plus simple que j'ai trouvé 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 le charger facilement dans votre application node.js en utilisant require

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

Asynchrone est là pour une raison! Jette une 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
}
56
Florian Margaine

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

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

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

35
Alex Eftimiades

Dans Node 8, vous pouvez utiliser la fonction intégrée util.promisify() 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
  })
14
J P

utilisant node-fs-extra (attente asynchrone)

const readJsonFile = async () => {
  try {
    const myJsonObject = await fs.readJson('./my_json_file.json');
    console.log(myJsonObject);
  } catch (err) {
    console.error(err)
  }
}

readJsonFile() // prints your json object
2
SumanP

https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfile_file_options_callback

var fs = require('fs');  

fs.readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
});  

// options
fs.readFile('/etc/passwd', 'utf8', callback);

https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfilesync_file_options

Vous pouvez trouver toutes les utilisations de Node.js dans la documentation du système de fichiers!
espérons cette aide pour vous!

2
xgqfrms

Utiliser le paquet fs-extra est assez simple:

Sync:

const fs = require('fs-extra')

const packageObj = fs.readJsonSync('./package.json')
console.log(packageObj.version) 

Async:

const fs = require('fs-extra')

const packageObj = await fs.readJson('./package.json')
console.log(packageObj.version) 
1
Arturo Menchaca

fonction parseIt () {

return new Promise(function(res){
    try{
        var fs = require('fs');
        const dirPath = 'K:\\merge-xml-junit\\xml-results\\master.json';
        fs.readFile(dirPath,'utf8',function(err,data){
            if(err) throw err;
            res(data);
    })}
    catch(err){
        res(err);
    }

})

}

fonction async test () {

jsonData = await parseIt();
var parsedJSON = JSON.parse(jsonData);
var testSuite = parsedJSON['testsuites']['testsuite'];
console.log(testSuite);

}

tester();

1
Satyabrata Saha