Schrijf / voeg gegevens toe in JSON-bestand met Node.js

Ik probeer een JSON-bestand te schrijven met behulp van een knooppunt van lusgegevens, bijvoorbeeld:

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

outPut in loop.json is:

id :1 square : 1

maar ik wil een uitvoerbestand zoals dit (hieronder) en ook als ik die code opnieuw uitvoer, zou het die nieuwe uitvoer als elementen in hetzelfde bestaande JSON-bestand moeten toevoegen:

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

Ik wil hetzelfde bestand gebruiken dat ik de eerste keer heb gemaakt, maar telkens als ik die code uitvoer, moeten er nieuwe elementen in datzelfde bestand worden toegevoegd

const fs = require('fs');
let 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
                    });
                }
                let 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
            });
        }
        let json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
    }
});

Antwoord 1, Autoriteit 100%

Als dit JSON-bestand na verloop van tijd niet te groot wordt, moet u het proberen:

  1. Maak een JavaScript-object met de tabelarray erin

    var obj = {
       table: []
    };
    
  2. Voeg er bijvoorbeeld enkele gegevens toe aan, bijvoorbeeld:

    obj.table.push({id: 1, square:2});
    
  3. Converteer het van een object naar een string met JSON.stringify

    var json = JSON.stringify(obj);
    
  4. Gebruik FS om het bestand naar schijf

    te schrijven

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. Als u het wilt toevoegen, lees het JSON-bestand en converteer het terug naar een object

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

Dit werkt voor gegevens die maximaal 100 MB effectief is. Over deze limiet moet u een databasemotor gebruiken.

Update:

Maak een functie die de huidige datum (jaar + maand + dag) als een tekenreeks retourneert. Maak het bestand met de naam deze string + .json. De FS-module heeft een functie die kan controleren op het bestandsevendeel genaamd Fs.Stat (Path, Callback).
Hiermee kunt u controleren of het bestand bestaat. Als het bestaat, gebruikt u de leesfunctie als dit niet het geval is, gebruik de functie CREATE. Gebruik de datumstring als het pad CUZ het bestand wordt genoemd als de vandaag-datum + .json. De callback bevat een statistiekenobject dat null zal zijn als het bestand niet bestaat.


Antwoord 2, Autoriteit 8%

Probeer het volgende programma. Misschien verwacht u deze uitvoer.

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

Sla dit programma op in een JavaScript-bestand, zeg, Square.js.

Voer vervolgens het programma uit vanuit de opdrachtprompt met behulp van de opdracht node square.js

Wat het doet is, overschrijft eenvoudig het bestaande bestand met nieuwe set gegevens, telkens wanneer u de opdracht uitvoert.

Happy Codering.


Antwoord 3, Autoriteit 3%

je moet het bestand lezen, elke keer dat je een nieuwe eigenschap aan de json wilt toevoegen, en dan de nieuwe eigenschappen toevoegen

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

Antwoord 4, autoriteit 3%

probeer

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

Antwoord 5, autoriteit 3%

Bovenstaand voorbeeld is ook correct, maar ik geef een eenvoudig voorbeeld:

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

Antwoord 6, autoriteit 2%

Voor synchrone nadering

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

Antwoord 7, autoriteit 2%

Voor het formatteren geeft jsonfile de optie spacesdie u als parameter kunt doorgeven:

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

Of gebruik jsonfile.spaces = 4. Lees details hier.

Ik zou niet aanraden om elke keer in de lus naar een bestand te schrijven, maar in plaats daarvan het JSON-object in de lus te maken en naar een bestand buiten de lus te schrijven.

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

Antwoord 8

Ik ben het eens met bovenstaande antwoorden. Hier is een compleet lees- en schrijfvoorbeeld voor iedereen die het nodig heeft.

    router.post('/', function(req, res, next) {
        console.log(req.body);
        var id = Math.floor((Math.random()*100)+1);
        var tital = req.body.title;
        var description = req.body.description;
        var mynotes = {"Id": id, "Title":tital, "Description": description};
        fs.readFile('db.json','utf8', function(err,data){
            var obj = JSON.parse(data);
            obj.push(mynotes);
            var strNotes = JSON.stringify(obj);
            fs.writeFile('db.json',strNotes, function(err){
                if(err) return console.log(err);
                console.log('Note added');
            });
        })
    });

Other episodes