Запись/добавление данных в файл JSON с использованием Node.js
Я пытаюсь записать файл JSON, используя данные узла из цикла, например:
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
outPut в loop.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 раз, но всякий раз, когда я запускаю этот код, новые элементы должны добавляться в тот же файл
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
Если этот файл 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 МБ. При превышении этого предела вы должны использовать ядро базы данных.
ОБНОВИТЬ:
Создайте функцию, которая возвращает текущую дату (год + месяц + день) в виде строки. Создайте файл с именем этой строки +.json. Модуль fs имеет функцию, которая может проверять существование файла с именем fs.stat (путь, обратный вызов). При этом вы можете проверить, существует ли файл. Если он существует, используйте функцию чтения, если нет, используйте функцию создания. Используйте строку даты в качестве пути, поскольку файл будет назван как сегодняшняя дата +.json. обратный вызов будет содержать объект статистики, который будет нулевым, если файл не существует.
Ответ 2
Пожалуйста, попробуйте следующую программу. Вы можете ожидать этого выхода.
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
Что он делает, просто перезаписывая существующий файл с новым набором данных каждый раз, когда вы выполняете команду.
Счастливое кодирование.
Ответ 3
вы должны прочитать файл, каждый раз, когда вы хотите добавить новое свойство в 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;
})
})
Ответ 4
Приведенный выше пример также верен, но я приведу простой пример:
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");
});
Ответ 5
Для форматирования jsonfile предоставляет параметр spaces
который вы можете передать в качестве параметра:
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);
});
Ответ 6
пытаться
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");
});
Ответ 7
Для синхронного подхода
const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));
Ответ 8
Вы также можете импортировать и использовать этот открытый компонент компонент write-json-file.
Пример:
const writeJsonFile = require('bit/global/write-json-file');
const jsonFile = "/tmp/exampleFile.json";
writeJsonFile(jsonFile,{isThisReal:ture,author:amit}).catch(err => console.log(err));