J'essaie d'écrire un fichier JSON en utilisant le nœud à partir des données de la boucle, par exemple :
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
Le résultat dans loop.json est :
id :1 square : 1
mais je veux un fichier de sortie comme celui-ci (ci-dessous) et aussi si j'exécute ce code à nouveau, il devrait ajouter cette nouvelle sortie comme é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 j'exécute ce code, de nouveaux éléments doivent être ajoutés dans ce même fichier.
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);
}
});
[1] : https://stackoverflow.com/users/5653484/kailniris [2] : https://stackoverflow.com/users/2630100/zamboney
Si ce fichier json ne devient pas trop gros au fil du temps, vous devriez essayer :
Créez un objet javascript contenant le tableau de la table.
var obj = {
tableau : []
} ;
Ajoutez-y quelques données comme
obj.table.push({id : 1, square:2}) ;
Convertir l'objet en chaîne de caractères 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) ; //il s'agit maintenant d'un objet
obj.table.push({id : 2, square:3}) ; //ajoute quelques données
json = JSON.stringify(obj) ; //convertit en json
fs.writeFile('monfichierjson.json' ;, json, 'utf8' ;, callback) ; //réécrit le fichier en retour
}}) ;
Cela fonctionnera pour des données d'une taille maximale de 100 Mo effectivement. Au-delà de cette limite, vous devriez utiliser un moteur de base de données.
MISE À JOUR :
Créez une fonction qui retourne 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 qui peut vérifier l'existence du fichier nommée fs.stat(path, callback). Avec cette fonction, vous pouvez vérifier si le fichier existe. S'il existe, utilisez la fonction de lecture ; s'il n'existe pas, utilisez la fonction de création. Utilisez la chaîne date comme chemin car le fichier sera nommé comme la date du jour + .json. Le callback contiendra un objet stats qui sera nul si le fichier n'existe pas.
Veuillez essayer le programme suivant. Vous devez vous attendre à ce résultat.
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.
Ensuite, exécutez le programme depuis l'invite de commande en utilisant la commande node square.js
.
Ce qu'il fait, c'est simplement écraser le fichier existant avec un nouvel ensemble de données, chaque fois que vous exécutez la commande.
Bon codage.
vous devriez lire le fichier, chaque fois que vous voulez ajouter une nouvelle propriété à la json, et ensuite ajouter 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;
})
})