it-swarm.com.de

Schreiben / Hinzufügen von Daten in eine JSON-Datei mit node.js

Ich versuche, JSON-Datei mit Knoten aus Schleifendaten zu schreiben, z

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

outPut in loop.json ist

id :1 square : 1

aber ich möchte eine Ausgabedatei wie diese (unten) und auch, wenn ich diesen Code erneut ausführe, sollte diese neue Ausgabe als Elemente in derselben vorhandenen JSON-Datei hinzugefügt werden

{
  "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
    }
  ]
}

Ich möchte dieselbe Datei verwenden, die ich zum ersten Mal erstellt habe, aber wenn ich diesen Code ausführe, sollten neue Elemente in dieselbe Datei eingefügt werden

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

Wenn diese json-Datei im Laufe der Zeit nicht zu groß wird, sollten Sie versuchen:

  1. Erstellen Sie ein JavaScript-Objekt mit dem darin enthaltenen Tabellenarray

    var obj = {
       table: []
    };
    
  2. Fügen Sie einige Daten hinzu

    obj.table.Push({id: 1, square:2});
    
  3. Konvertieren Sie es mit stringify von einem Objekt in einen String

    var json = JSON.stringify(obj);
    
  4. verwenden Sie fs, um die Datei auf die Festplatte zu schreiben

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. wenn Sie es anhängen möchten, lesen Sie die JSON-Datei und konvertieren Sie sie zurück in ein Objekt

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

Dies funktioniert effektiv für Daten mit einer Größe von maximal 100 MB. Über dieser Grenze sollten Sie ein Datenbankmodul verwenden.

AKTUALISIEREN:

Erstellen Sie eine Funktion, die das aktuelle Datum (Jahr + Monat + Tag) als Zeichenfolge zurückgibt. Erstellen Sie die Datei mit dem Namen dieser Zeichenfolge + .json. Das fs-Modul verfügt über eine Funktion, die nach der Existenz einer Datei mit dem Namen fs.stat (Pfad, Rückruf) suchen kann. Hiermit können Sie überprüfen, ob die Datei existiert. Wenn es existiert, verwenden Sie die Lesefunktion, wenn dies nicht der Fall ist, verwenden Sie die Erstellungsfunktion. Verwenden Sie die Datumszeichenfolge als Pfad, da die Datei als heutiges Datum + .json benannt wird. Der Rückruf enthält ein Statistikobjekt, das null ist, wenn die Datei nicht vorhanden ist.

322
kailniris

Bitte versuchen Sie folgendes Programm. Möglicherweise erwarten Sie diese Ausgabe.

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');
    }
);

Speichern Sie dieses Programm in einer Javascript-Datei, beispielsweise square.js.

Führen Sie dann das Programm über die Eingabeaufforderung mit dem Befehl node square.js aus.

Sie überschreiben einfach die vorhandene Datei mit neuen Daten, wenn Sie den Befehl ausführen.

Fröhliche Codierung.

16
Jacob Nelson

sie sollten die Datei jedes Mal lesen, wenn Sie dem json eine neue Eigenschaft hinzufügen möchten, und dann die neuen Eigenschaften hinzufügen

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

Das obige Beispiel ist auch richtig, aber ich gebe ein einfaches Beispiel:

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

Für die Formatierung gibt jsonfile die Option spaces, die Sie als Parameter übergeben können:

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

Oder benutze jsonfile.spaces = 4. Lesen Sie Details hier .

Ich würde nicht vorschlagen, jedes Mal in der Schleife in eine Datei zu schreiben, sondern das JSON-Objekt in der Schleife zu konstruieren und in eine Datei außerhalb der Schleife zu schreiben.

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

versuchen

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

Für synchrones Anfahren

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