Snažím sa napísať súbor JSON pomocou uzla z údajov slučky, napr.:
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
outPut v loop.json je:
id :1 square : 1
ale chcem, aby výstupný súbor vyzeral takto (nižšie) a tiež, ak spustím tento kód znova, mal by pridať tento nový výstup ako prvky do toho istého existujúceho súboru JSON:
{
"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
}
]
}
Chcem použiť ten istý súbor, ktorý som vytvoril prvýkrát, ale vždy, keď spustím tento kód, mali by sa do toho istého súboru pridať nové prvky
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);
}
});
Ak sa tento súbor json nestane príliš veľkým v priebehu času, mali by ste to skúsiť:
Vytvorte javascriptový objekt s tabuľkovým poľom
var obj = {
table: []
};
Pridajte do nej nejaké údaje, ako napr.
obj.table.push({id: 1, square:2});
Preveďte ho z objektu na reťazec pomocou funkcie stringify
var json = JSON.stringify(obj);
Použite fs na zápis súboru na disk
var fs = require('fs');
fs.writeFile('myjsonfile.json', json, 'utf8', callback);
ak ho chcete doplniť, prečítajte súbor json a prekonvertujte ho späť na objekt
fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
if (err){
console.log(err);
} else {
obj = JSON.parse(data); //teraz je to objekt
obj.table.push({id: 2, square:3}); //pridajte nejaké údaje
json = JSON.stringify(obj); //prekonvertuj to späť na json
fs.writeFile('myjsonfile.json', json, 'utf8', callback); //zapíš to späť
}});
Toto bude efektívne fungovať pre dáta veľké maximálne 100 MB. Nad tento limit by ste mali použiť databázový stroj.
UPDATE:
Vytvorte funkciu, ktorá vráti aktuálny dátum (rok+mesiac+deň) ako reťazec. Vytvorte súbor s názvom tohto reťazca + .json. modul fs má funkciu, ktorá dokáže kontrolovať existenciu súboru s názvom fs.stat(cesta, spätné volanie). Pomocou nej môžete skontrolovať, či súbor existuje. Ak existuje, použite funkciu read, ak nie, použite funkciu create. Ako cestu použite reťazec dátumu, pretože súbor bude pomenovaný ako dnešný dátum + .json. spätné volanie bude obsahovať objekt stats, ktorý bude nulový, ak súbor neexistuje.
Vyskúšajte nasledujúci program. Možno očakávate tento výstup.
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');
}
);
Uložte tento program do javascriptového súboru, povedzme square.js.
Potom spustite program z príkazového riadku pomocou príkazu node square.js
Pri každom spustení príkazu sa jednoducho prepíše existujúci súbor novým súborom údajov.
Šťastné kódovanie.
by ste mali čítať súbor, zakaždým, keď chcete pridať novú vlastnosť do json, a potom pridať nové vlastnosti
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;
})
})