J'essaie d'écrire un fichier JSON en utilisant un noeud à partir de données en boucle, par exemple
var jsonfile = require('jsonfile');
for (i=0; i <11 ; i++){
jsonfile.writeFile('loop.json', "id :" + i + " square :" + i*i);
}
outPut dans loop.json est
id :1 square : 1
mais je veux un fichier de sortie comme ceci (ci-dessous) et aussi si je lance à nouveau ce code, il devrait ajouter cette nouvelle sortie en tant qu'éléments dans le même fichier JSON existant
{
"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
}
]
}
Je veux utiliser le même fichier que j'ai créé la première fois, mais chaque fois que je lance ce code, de nouveaux éléments doivent s'ajouter au même fichier.
var fs = require('fs');
var 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});
}
var 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});
}
var json = JSON.stringify(obj);
fs.writeFile('myjsonfile.json', json);
}
});
Si ce fichier JSON ne deviendra pas trop gros avec le temps, vous devriez essayer:
Créez un objet javascript contenant le tableau de la table
var obj = {
table: []
};
Ajoutez des données comme
obj.table.Push({id: 1, square:2});
Convertissez-le d'un objet en chaîne avec stringify
var json = JSON.stringify(obj);
utiliser fs pour écrire le fichier sur le disque
var fs = require('fs');
fs.writeFile('myjsonfile.json', json, 'utf8', callback);
si vous voulez l'ajouter, lisez le fichier JSON et reconvertissez-le en objet.
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
}});
Cela fonctionnera efficacement pour des données de 100 Mo maximum. Au-delà de cette limite, vous devez utiliser un moteur de base de données.
MISE À JOUR:
Créez une fonction qui renvoie la date actuelle (année + mois + jour) sous forme de chaîne. Créez le fichier nommé cette chaîne + .json. le module fs a une fonction permettant de vérifier l’existence d’un fichier nommé fs.stat (chemin, rappel). Avec cela, vous pouvez vérifier si le fichier existe. S'il existe, utilisez la fonction read sinon, utilisez la fonction create. Utilisez la chaîne de date comme chemin car le fichier sera nommé date du jour + .json. le rappel contiendra un objet stats qui sera null si le fichier n'existe pas.
S'il vous plaît essayez le programme suivant. Vous pourriez vous attendre à cette sortie.
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');
}
);
Enregistrez ce programme dans un fichier javascript, disons square.js.
Puis exécutez le programme à partir de l'invite de commande à l'aide de la commande node square.js
En remplaçant simplement le fichier existant par un nouvel ensemble de données, chaque fois que vous exécutez la commande.
Bonne codage.
vous devriez lire le fichier chaque fois que vous voulez ajouter une nouvelle propriété au json, puis ajoutez les nouvelles propriétés
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;
})
})
L'exemple ci-dessus est également correct, mais je fournis un exemple simple:
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");
});
Pour formater jsonfile donne l'option spaces
que vous pouvez passer en paramètre:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
Ou utilisez jsonfile.spaces = 4
. Lire les détails ici .
Je ne suggérerais pas d'écrire dans un fichier à chaque fois dans la boucle, mais de construire l'objet JSON dans la boucle et d'écrire dans un fichier en dehors de la boucle.
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);
});
essayer
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");
});
Pour approche synchrone
const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));