Node.js kullanarak JSON dosyasına veri yazın / ekleyin


213

Döngü verilerinden düğüm kullanarak JSON dosyası yazmaya çalışıyorum, örneğin:

let jsonFile = require('jsonfile');

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

outPut in loop.json:

id :1 square : 1

ancak bunun gibi bir çıktı dosyası istiyorum (aşağıda) ve ayrıca bu kodu tekrar çalıştırırsam, yeni çıktıyı aynı mevcut JSON dosyasındaki öğeler olarak eklemeli:

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

İlk oluşturduğum aynı dosyayı kullanmak istiyorum, ancak bu kodu her çalıştırdığımda yeni öğeler aynı dosyaya eklemeli

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

Yanıtlar:


413

Bu JSON dosyası zamanla çok büyük olmazsa, şunu denemelisiniz:

  1. İçinde tablo dizisi bulunan bir JavaScript nesnesi oluşturun

    var obj = {
       table: []
    };
    
  2. Buna bazı veriler ekleyin, örneğin:

    obj.table.push({id: 1, square:2});
    
  3. Bir nesneden bir dizeye dönüştürün. JSON.stringify

    var json = JSON.stringify(obj);
    
  4. Dosyayı diske yazmak için fs kullanın

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. Eklemek istiyorsanız, JSON dosyasını okuyun ve tekrar bir nesneye dönüştürün

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

Bu, 100 MB'a kadar olan veriler için etkili bir şekilde çalışacaktır. Bu sınırın üzerinde, bir veritabanı motoru kullanmalısınız.

GÜNCELLEME:

Geçerli tarihi (yıl + ay + gün) bir dizge olarak döndüren bir işlev oluşturun. Bu dize + .json adlı dosyayı oluşturun. fs modülü, fs.stat (yol, geri arama) adlı dosya varlığını kontrol edebilen bir işleve sahiptir. Bununla dosyanın var olup olmadığını kontrol edebilirsiniz. Varsa, yoksa okuma işlevini kullanın, oluşturma işlevini kullanın. Dosya bugün tarihi + .json olarak adlandırılacağı için, yol olarak tarih dizesini kullanın. geri çağırma, dosya yoksa null olacak bir istatistik nesnesi içerecektir.


1
Cevap için teşekkürler, çalışmasını denedim ama eski dosyanın var olup olmadığını nasıl kontrol edeceğimi, sonra readlfile kodunu çalıştır, başka bir writeFile dosyasını çalıştır, dosya adında geçerli tarihle günlük yeni dosya oluşturuyorum ve o eski dosyaya tüm gün yeni verilerin eklenmesini istiyorum bu kod çalıştırıldığında
Isoftmaster

1
bir kez daha kodumun çalışmasını sağladım: D tüm desteğinizle ama sorumu cevapla güncellenen fs.exists işlevini kullandım
Isoftmaster

1
Veya yukarıdaki kodda gösterilmeyen tüm karmaşıklıkları saran jsonfile Node paketini de kullanabilirsiniz .
Jeach

1
JSON nesnesinin "tablosu" veya özellikleri önceden bilinmiyorsa ne olacak ???
yaşlı çocuk

@kailniris efendim, yerel json dosyamdaki belirli bir düğümü açısal js.ie'de nasıl güncelleyebilirim bir config.json dosyam var, bunun belirli bir düğümünü güncellemek istedim, sonra bunu nasıl yapabilirim.
theburningfire

29

Lütfen aşağıdaki programı deneyin. Bu çıktıyı bekliyor olabilirsiniz.

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

Bu programı bir javascript dosyasına kaydedin, örneğin square.js.

Ardından, komutu kullanarak programı komut isteminden çalıştırın. node square.js

Yaptığı şey, komutu her çalıştırdığınızda mevcut dosyanın üzerine yeni veri kümesini yazmaktır.

Mutlu Kodlama.


12

json'a her yeni özellik eklemek istediğinizde dosyayı okumanız ve ardından yeni özellikleri eklemeniz gerekir.

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

1
Cevap için teşekkürler, çalışmasını denedim ama eski dosyanın var olup olmadığını nasıl kontrol edeceğimi sonra readlfile kodunu çalıştırın, yeni dosya oluşturmak için writeFile doğrudan çalıştırın, dosya adında geçerli tarihle günlük yeni dosya oluşturuyorum ve buna yeni verilerin eklenmesini istiyorum bu kod çalıştırıldığında tüm gün eski dosya
Isoftmaster

10

Yukarıdaki örnek de doğrudur, ancak basit bir örnek veriyorum:

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

9

Deneyin

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

Güzel baskı versiyonu için teşekkürler!
Adrien

8

Biçimlendirmek için jsonfile, spacesparametre olarak geçebileceğiniz bir seçenek sunar :

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

Veya kullanın jsonfile.spaces = 4. Ayrıntıları buradan okuyun .

Döngüde her seferinde dosyaya yazmayı önermem, bunun yerine döngüde JSON nesnesini oluştur ve döngünün dışındaki dosyaya yaz.

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

8

Senkron yaklaşım için

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

0

Yukarıdaki cevaplara katılıyorum, İşte ihtiyacı olan herkes için eksiksiz bir okuma ve yazma örneği.

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

        })
        
        
    });


  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.