Javascript 使用Node.js在JSON文件中写入/添加数据
我正在尝试使用循环数据中的节点编写JSON文件,例如:Javascript 使用Node.js在JSON文件中写入/添加数据,javascript,json,node.js,fs,Javascript,Json,Node.js,Fs,我正在尝试使用循环数据中的节点编写JSON文件,例如: 让jsonFile=require('jsonFile'); 对于(i=0;i
让jsonFile=require('jsonFile');
对于(i=0;i<11;i++){
jsonFile.writeFile('loop.json',id:+i+“square:+i*i);
}
loop.json中的输出为:
id :1 square : 1
但我想要这样的输出文件(如下),并且如果我再次运行该代码,它应该将新输出作为元素添加到同一个现有JSON文件中:
{
“表格”:[
{
“Id”:1,
“正方形”:1
},
{
“Id”:2,
“正方形”:3
},
{
“Id”:3,
“正方形”:9
},
{
“Id”:4,
“正方形”:16
},
{
“Id”:5,
“正方形”:25
},
{
“Id”:6,
“正方形”:36
},
{
“Id”:7,
“正方形”:49
},
{
“Id”:8,
“正方形”:64
},
{
“Id”:9,
“广场”:81
},
{
“Id”:10,
“正方形”:100
}
]
}
我想使用我第一次创建的同一个文件,但每当我运行代码时,新元素都应该添加到同一个文件中
const fs=require('fs');
设obj={
表:[]
};
exists('myjsonfile.json',函数(exists){
如果(存在){
log(“是文件存在”);
readFile('myjsonfile.json',函数readFileCallback(err,data){
如果(错误){
控制台日志(err);
}否则{
obj=JSON.parse(数据);
对于(i=0;i<5;i++){
表推({
id:我,
正方形:i*i
});
}
让json=json.stringify(obj);
writeFile('myjsonfile.json',json);
}
});
}否则{
console.log(“文件不存在”);
对于(i=0;i<5;i++){
表推({
id:我,
正方形:i*i
});
}
让json=json.stringify(obj);
writeFile('myjsonfile.json',json);
}
});
每次要向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;
})
})
var fs=require('fs');
fs.readFile('data.json',函数(err,content){
如果(错误)抛出错误;
var parseJson=JSON.parse(内容);
对于(i=0;i请尝试以下程序。您可能期待此输出
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');
}
);
var fs=require('fs');
变量数据={}
data.table=[]
对于(i=0;i如果此JSON文件不会随时间变得太大,您应该尝试:
创建包含表数组的JavaScript对象
var obj = {
table: []
};
向其中添加一些数据,例如:
obj.table.push({id: 1, square:2});
使用JSON.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的数据。超过此限制,您应该使用数据库引擎
更新:
创建一个函数,以字符串形式返回当前日期(年+月+日)。创建名为this string+.json的文件。fs模块有一个函数,可以检查名为fs.stat(路径,回调)的文件是否存在。
这样,您可以检查该文件是否存在。如果存在,请使用read函数,如果不存在,请使用create函数。使用日期字符串作为路径,因为该文件将被命名为today date+.json。回调将包含一个stats对象,如果该文件不存在,则该对象将为null。对于格式设置,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 jsonfile=require('jsonfile');
var obj={
‘表’:[]
};
对于(i=0;i),上述示例也正确,但我提供了一个简单的示例:
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");
});
试一试
用于同步进近
const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));
我同意以上的回答,这里有一个完整的读写样本,供任何需要的人使用
router.post('/', function(req, res, next) {
console.log(req.body);
var id = Math.floor((Math.random()*100)+1);
var tital = req.body.title;
var description = req.body.description;
var mynotes = {"Id": id, "Title":tital, "Description": description};
fs.readFile('db.json','utf8', function(err,data){
var obj = JSON.parse(data);
obj.push(mynotes);
var strNotes = JSON.stringify(obj);
fs.writeFile('db.json',strNotes, function(err){
if(err) return console.log(err);
console.log('Note added');
});
})
});
感谢回复我尝试了它的工作,但如何检查旧文件是否存在然后运行readlfile代码否则直接运行writeFile我正在创建文件名中包含当前日期的每日新文件,我希望在该代码运行时一整天都在该旧文件中添加新数据再次感谢您我让我的代码工作:D在您的支持下,但我使用了fs.exists function my question updated with answer或者您也可以使用节点包,它封装了上面代码中未显示的所有复杂性。如果“表”或者JSON对象的属性事先不知道???@kailniris sir我如何在angular js中更新本地JSON文件中的特定节点。例如,我有一个config.JSON文件,我想更新它的特定节点,那么我该怎么做。感谢回复,我尝试了它的工作,但如何检查旧文件是否存在,然后运行readlfile代码,否则运行writeFile direct创建新文件我正在创建文件名中包含当前日期的每日新文件,我希望在该代码运行时,新数据可以整天添加到旧文件中感谢漂亮的打印版本!
router.post('/', function(req, res, next) {
console.log(req.body);
var id = Math.floor((Math.random()*100)+1);
var tital = req.body.title;
var description = req.body.description;
var mynotes = {"Id": id, "Title":tital, "Description": description};
fs.readFile('db.json','utf8', function(err,data){
var obj = JSON.parse(data);
obj.push(mynotes);
var strNotes = JSON.stringify(obj);
fs.writeFile('db.json',strNotes, function(err){
if(err) return console.log(err);
console.log('Note added');
});
})
});