запись/добавление данных в файл JSON с помощью узла.js
Я пытаюсь написать JSON-файл, используя узел из данных цикла например,
var jsonfile = require('jsonfile');
for (i=0; i <11 ; i++){
jsonfile.writeFile('loop.json', "id :" + i + " square :" + i*i);
}
вывод в цикле.json-это
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.
обновление:
создать функцию, которая возвращает текущую дату (год+месяц+день) в виде строки. Создайте файл с именем эта строка + .формат JSON. модуль fs имеет функцию, которая может проверить наличие файла с именем fs.stat (путь, обратный вызов). При этом вы можете проверить, существует ли файл. Если он существует, используйте функцию read если это не так, используйте функцию create. Используйте строку даты в качестве пути, потому что файл будет называться сегодняшней датой + .формат JSON. обратный вызов будет содержать объект статистики, который будет равен null, если файл не существует.
пожалуйста, попробуйте следующую программу. Возможно, вы ожидаете этого вывода.
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"); });