Döngü verilerinden node kullanarak JSON dosyası yazmaya çalışıyorum, örn:
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
ancak aşağıdaki gibi bir çıktı dosyası istiyorum ve ayrıca bu kodu tekrar çalıştırırsam, bu yeni çıktıyı aynı mevcut JSON dosyasına öğeler olarak eklemelidir:
{
"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 kez oluşturduğum aynı dosyayı kullanmak istiyorum, ancak bu kodu her çalıştırdığımda aynı dosyaya yeni öğeler eklenmelidir
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);
}
});
Bu json dosyası zaman içinde çok büyük olmayacaksa denemelisiniz:
İçinde tablo dizisi olan bir javascript nesnesi oluşturun
var obj = {
Masa: []
};
Buna aşağıdaki gibi bazı veriler ekleyin
obj.table.push({id: 1, kare:2});
stringify ile bir nesneden dizeye dönüştürün
var json = JSON.stringify(obj);
dosyayı diske yazmak için fs kullanın
var fs = require('fs');
fs.writeFile('myjsonfile.json', json, 'utf8', callback);
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); //şimdi bir nesne
obj.table.push({id: 2, kare:3}); //bazı veriler ekleyin
json = JSON.stringify(obj); //json'a geri dönüştürün
fs.writeFile('myjsonfile.json', json, 'utf8', callback); // geri yaz
}});
Bu, maksimum 100 MB büyüklüğündeki 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) dize olarak döndüren bir fonksiyon oluşturun. Bu dize + .json adında bir dosya oluşturun. fs modülünün fs.stat(path, callback) adında dosya varlığını kontrol edebilen bir işlevi vardır. Bu fonksiyon ile dosyanın var olup olmadığını kontrol edebilirsiniz. Eğer varsa, read fonksiyonunu kullanın, eğer yoksa create fonksiyonunu kullanın. Yol olarak tarih dizesini kullanın çünkü dosya bugün tarihi + .json olarak adlandırılacaktır. geri arama, dosya mevcut değilse null olacak bir istatistik nesnesi içerecektir.
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 node square.js
komutunu kullanarak programı komut isteminden çalıştırın
Yaptığı şey, komutu her çalıştırdığınızda mevcut dosyanın üzerine yeni veri kümesi yazmaktır.
Mutlu kodlamalar.
json'a her yeni özellik eklemek istediğinizde dosyayı okumalı ve ardından yeni özellikleri eklemelisiniz
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;
})
})