web-dev-qa-db-fra.com

écrire / ajouter des données dans un fichier JSON en utilisant node.js

J'essaie d'écrire un fichier JSON en utilisant un noeud à partir de données en boucle, par exemple

var jsonfile = require('jsonfile');
for (i=0; i <11 ; i++){
   jsonfile.writeFile('loop.json', "id :" + i + " square :" + i*i);
}

outPut dans loop.json est

id :1 square : 1

mais je veux un fichier de sortie comme ceci (ci-dessous) et aussi si je lance à nouveau ce code, il devrait ajouter cette nouvelle sortie en tant qu'éléments dans le même fichier JSON existant

{
  "table": [
    {
      "Id ": 1,
      "square ": 1
    },
    {
      "Id ": 2,
      "square ": 3
    },
    {
      "Id ": 3,
      "square ": 9
    },
    {
      "Id ": 4,
      "square ": 16
    },
    {
      "Id ": 5,
      "square ": 25
    },
    {
      "Id ": 6,
      "square ": 36
    },
    {
      "Id ": 7,
      "square ": 49
    },
    {
      "Id ": 8,
      "square ": 64
    },
    {
      "Id ": 9,
      "square ": 81
    },
    {
      "Id ": 10,
      "square ": 100
    }
  ]
}

Je veux utiliser le même fichier que j'ai créé la première fois, mais chaque fois que je lance ce code, de nouveaux éléments doivent s'ajouter au même fichier.

var fs = require('fs');

var obj = {
   table: []
};

fs.exists('myjsonfile.json', function(exists){
    if(exists){
        console.log("yes file exists");
        fs.readFile('myjsonfile.json', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); 
        for (i=0; i<5 ; i++){
        obj.table.Push({id: i, square:i*i});
        }
        var json = JSON.stringify(obj); 
        fs.writeFile('myjsonfile.json', json); 
        }});
    } else {
        console.log("file not exists")
        for (i=0; i<5 ; i++){
        obj.table.Push({id: i, square:i*i});
        }
        var json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
        }
    });
164
Isoftmaster

Si ce fichier JSON ne deviendra pas trop gros avec le temps, vous devriez essayer:

  1. Créez un objet javascript contenant le tableau de la table

    var obj = {
       table: []
    };
    
  2. Ajoutez des données comme

    obj.table.Push({id: 1, square:2});
    
  3. Convertissez-le d'un objet en chaîne avec stringify

    var json = JSON.stringify(obj);
    
  4. utiliser fs pour écrire le fichier sur le disque

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. si vous voulez l'ajouter, lisez le fichier JSON et reconvertissez-le en objet.

    fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); //now it an object
        obj.table.Push({id: 2, square:3}); //add some data
        json = JSON.stringify(obj); //convert it back to json
        fs.writeFile('myjsonfile.json', json, 'utf8', callback); // write it back 
    }});
    

Cela fonctionnera efficacement pour des données de 100 Mo maximum. Au-delà de cette limite, vous devez utiliser un moteur de base de données.

MISE À JOUR:

Créez une fonction qui renvoie la date actuelle (année + mois + jour) sous forme de chaîne. Créez le fichier nommé cette chaîne + .json. le module fs a une fonction permettant de vérifier l’existence d’un fichier nommé fs.stat (chemin, rappel). Avec cela, vous pouvez vérifier si le fichier existe. S'il existe, utilisez la fonction read sinon, utilisez la fonction create. Utilisez la chaîne de date comme chemin car le fichier sera nommé date du jour + .json. le rappel contiendra un objet stats qui sera null si le fichier n'existe pas.

322
kailniris

S'il vous plaît essayez le programme suivant. Vous pourriez vous attendre à cette sortie.

var fs = require('fs');

var data = {}
data.table = []
for (i=0; i <26 ; i++){
   var obj = {
       id: i,
       square: i * i
   }
   data.table.Push(obj)
}
fs.writeFile ("input.json", JSON.stringify(data), function(err) {
    if (err) throw err;
    console.log('complete');
    }
);

Enregistrez ce programme dans un fichier javascript, disons square.js.

Puis exécutez le programme à partir de l'invite de commande à l'aide de la commande node square.js

En remplaçant simplement le fichier existant par un nouvel ensemble de données, chaque fois que vous exécutez la commande.

Bonne codage.

16
Jacob Nelson

vous devriez lire le fichier chaque fois que vous voulez ajouter une nouvelle propriété au json, puis ajoutez les nouvelles propriétés

var fs = require('fs');
fs.readFile('data.json',function(err,content){
  if(err) throw err;
  var parseJson = JSON.parse(content);
  for (i=0; i <11 ; i++){
   parseJson.table.Push({id:i, square:i*i})
  }
  fs.writeFile('data.json',JSON.stringify(parseJson),function(err){
    if(err) throw err;
  })
})
8
Zamboney

L'exemple ci-dessus est également correct, mais je fournis un exemple simple:

var fs = require("fs");
var sampleObject = {
    name: 'pankaj',
    member: 'stack',
    type: {
        x: 11,
        y: 22
    }
};

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {
        console.error(err);
        return;
    };
    console.log("File has been created");
});
8
Pankaj Chauhan

Pour formater jsonfile donne l'option spaces que vous pouvez passer en paramètre:

   jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
         console.error(err);
   })

Ou utilisez jsonfile.spaces = 4. Lire les détails ici .

Je ne suggérerais pas d'écrire dans un fichier à chaque fois dans la boucle, mais de construire l'objet JSON dans la boucle et d'écrire dans un fichier en dehors de la boucle.

var jsonfile = require('jsonfile');
var obj={
     'table':[]
    };

for (i=0; i <11 ; i++){
       obj.table.Push({"id":i,"square":i*i});
}
jsonfile.writeFile('loop.json', obj, {spaces:2}, function(err){
      console.log(err);
});
6
avck

essayer

var fs = require("fs");
var sampleObject = { your data };

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {  console.error(err);  return; };
    console.log("File has been created");
});
4
user11426503

Pour approche synchrone

const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));
3