запись/добавление данных в файл JSON с помощью узла.Яш
Я пытаюсь написать файл JSON, используя узел из данных цикла например!--5-->
var jsonfile = require('jsonfile');
for (i=0; i <11 ; i++){
jsonfile.writeFile('loop.json', "id :" + i + " square :" + i*i);
}
вывод в цикле.json is
id :1 square : 1
но я хочу выходной файл, как это (ниже), а также если я снова запускаю этот код, он должен добавить этот новый вывод как элементы в том же существующем файле 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
}
]
}
Я хочу использовать тот же файл, который я создал 1-й раз, но всякий раз, когда я запускаю этот код, новые элементы должны добавлять в тот же файл
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);
}
});
5 ответов
если этот файл json не станет слишком большим с течением времени, вы должны попробовать:
-
создайте объект javascript с массивом таблиц в нем
var obj = { table: [] };
-
добавить некоторые данные к нему, как
obj.table.push({id: 1, square:2});
-
преобразуйте его из объекта в строку с помощью stringify
var json = JSON.stringify(obj);
-
используйте fs для записи файла на диск
var fs = require('fs'); fs.writeFile('myjsonfile.json', json, 'utf8', callback);
-
если вы хотите добавить его, прочитайте json файл и преобразовать его обратно в объект
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 }});
это будет работать для данных, больших как 100 МБ Макс эффективно. Сверх этого предела следует использовать компонент database engine.
обновление:
создать функцию, которая возвращает текущую дату (год+месяц+день) в виде строки. Создайте файл с именем this string + .формат JSON. модуль fs имеет функцию, которая может проверить наличие файла с именем fs.stat (путь, обратный вызов). С помощью этого вы можете проверить, существует ли файл. Если он существует, используйте функцию read, если нет, используйте функцию create. Используйте строку даты в качестве пути, потому что файл будет называться сегодняшней датой + .формат JSON. обратный вызов будет содержать объект stats, который будет нулевым, если файл не существует.
пожалуйста, попробуйте следующую программу. Возможно, вы ожидаете этого результата.
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');
}
);
сохраните эту программу в файле javascript, скажем, square.js.
затем запустите программу из командной строки с помощью команды node square.js
что он делает, просто перезаписывает существующий файл с новым набором данных, каждый раз, когда вы выполняете команду.
Удачи В Кодировании.
вы должны читать файл каждый раз, когда хотите добавить новое свойство в json, а затем добавить новые свойства
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;
})
})
для форматирования jsonfile дает , который вы можете передать в качестве параметра:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
или использовать jsonfile.spaces = 4
. Читать подробности здесь.
Я бы не предложил писать в файл каждый раз в цикле, вместо этого создайте объект JSON в цикле и напишите в файл вне цикла.
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);
});
выше пример также правильный, но я предоставляю простой пример:
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");
});