Ik probeer JSON bestand te schrijven met behulp van node van loop data, bijv:
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 uitvoerbestand zoals dit (hieronder) en ook als ik die code opnieuw uitvoer moet het die nieuwe uitvoer toevoegen als elementen in hetzelfde bestaande JSON-bestand:
{
"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 nieuwe elementen worden toegevoegd aan datzelfde bestand.
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);
}
});
Als dit json-bestand na verloop van tijd niet te groot wordt, moet je het proberen:
Maak een javascript object met de tabel array erin
var obj = {
tabel: []
};
Voeg er wat gegevens aan toe zoals
obj.table.push({id: 1, square:2});
Converteer het van een object naar een string met stringify
var json = JSON.stringify(obj);
gebruik fs om het bestand naar schijf te schrijven
var fs = require('fs');
fs.writeFile('mijnjsonfile.json', json, 'utf8', callback);
als je het wilt toevoegen lees dan het json-bestand en converteer het terug naar een object
fs.readFile('mijnjsonfile.json', 'utf8', functie readFileCallback(err, data){
als (err){
console.log(err);
} anders {
obj = JSON.parse(data); //nu is het een object
obj.table.push({id: 2, square:3}); //toevoeging van gegevens
json = JSON.stringify(obj); //omzet het terug naar json
fs.writeFile('myjsonfile.json', json, 'utf8', callback); //schrijf het terug
}});
Dit zal werken voor data groot als 100 MB max effectief. Boven deze limiet, zou je een database engine moeten gebruiken.
UPDATE:
Maak een functie die de huidige datum (jaar+maand+dag) retourneert als een string. Maak een bestand aan met de naam deze string + .json. De fs module heeft een functie die kan controleren of een bestand bestaat, genaamd fs.stat(path, callback). Hiermee kun je controleren of het bestand bestaat. Als het bestaat, gebruik dan de read functie als het niet bestaat, gebruik dan de create functie. Gebruik de datum string als het pad omdat het bestand zal worden genoemd als de datum van vandaag + .json. De callback zal een stats object bevatten dat null zal zijn als het bestand niet bestaat.
Probeer het volgende programma eens. Je zou deze uitvoer kunnen verwachten.
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, bijvoorbeeld, square.js.
Voer het programma vervolgens uit vanaf de opdrachtprompt met het commando node square.js
Wat het doet is, simpelweg het bestaande bestand overschrijven met nieuwe gegevens, elke keer dat je het commando uitvoert.
Gelukkig coderen.
moet je het bestand lezen, elke keer als 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;
})
})