我正在尝试使用节点从循环数据中写入JSON文件,例如:
let jsonFile = require('jsonfile'); for (i = 0; i < 11; i++) { jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i); }
loop.json中的outPut是:
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 } ] }
我想使用第一次创建的相同文件,但是每当我运行该代码时,新元素都应添加到该文件中
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); } });
如果随着时间的推移该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 MB的数据。超过此限制,您应该使用数据库引擎。
更新:
创建一个函数,该函数以字符串形式返回当前日期(年+月+日)。创建名为此字符串+ .json的文件。fs模块具有一个功能,该功能可以检查名为fs.stat(path,callback)的文件是否存在。这样,您可以检查文件是否存在。如果存在,则使用读取功能;如果不存在,请使用创建功能。使用日期字符串作为路径,因为文件将被命名为今天日期+ .json。回调将包含一个stats对象,如果文件不存在,则该对象为null。