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:
-
Maak een JavaScript-object met de tabelarray erin
var obj = { table: [] };
-
Voeg er bijvoorbeeld enkele gegevens toe aan, bijvoorbeeld:
obj.table.push({id: 1, square:2});
-
Converteer het van een object naar een string met
JSON.stringify
var json = JSON.stringify(obj);
-
Gebruik FS om het bestand naar schijf
te schrijven
var fs = require('fs'); fs.writeFile('myjsonfile.json', json, 'utf8', callback);
-
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 spaces
die 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');
});
})
});