使用 Node.js 在 JSON 文件中写入/添加数据
Write / add data in JSON file using Node.js
我正在尝试使用来自循环数据的节点编写 JSON 文件,例如:
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
outPut in 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
}
]
}
我想使用我第一次创建的同一个文件,但是每当我 运行 代码新元素应该添加到同一个文件中时
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 添加一个新的 属性,然后添加新的属性
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');
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 文件不会随着时间的推移变得太大,您应该尝试:
创建一个包含 table 数组的 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 的数据。超过这个限制,你应该使用数据库引擎。
更新:
创建一个函数,returns 当前日期(年+月+日)作为字符串。创建名为此字符串 + .json 的文件。 fs 模块有一个函数可以检查名为 fs.stat(path, callback) 的文件是否存在。
有了这个,您可以检查文件是否存在。如果存在,则使用读取函数;如果不存在,则使用创建函数。使用日期字符串作为路径,因为文件将被命名为今天的日期 + .json。回调将包含一个统计对象,如果文件不存在,该对象将为 null。
为了格式化 jsonfile 提供 spaces
选项,您可以将其作为参数传递:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
或使用jsonfile.spaces = 4
。阅读详情 here.
我不建议在循环中每次都写入文件,而是在循环中构造 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");
});
尝试
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");
});
对于同步方法
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');
});
})
});
我正在尝试使用来自循环数据的节点编写 JSON 文件,例如:
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
outPut in 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
}
]
}
我想使用我第一次创建的同一个文件,但是每当我 运行 代码新元素应该添加到同一个文件中时
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 添加一个新的 属性,然后添加新的属性
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');
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 文件不会随着时间的推移变得太大,您应该尝试:
创建一个包含 table 数组的 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 的数据。超过这个限制,你应该使用数据库引擎。
更新:
创建一个函数,returns 当前日期(年+月+日)作为字符串。创建名为此字符串 + .json 的文件。 fs 模块有一个函数可以检查名为 fs.stat(path, callback) 的文件是否存在。 有了这个,您可以检查文件是否存在。如果存在,则使用读取函数;如果不存在,则使用创建函数。使用日期字符串作为路径,因为文件将被命名为今天的日期 + .json。回调将包含一个统计对象,如果文件不存在,该对象将为 null。
为了格式化 jsonfile 提供 spaces
选项,您可以将其作为参数传递:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
或使用jsonfile.spaces = 4
。阅读详情 here.
我不建议在循环中每次都写入文件,而是在循环中构造 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");
});
尝试
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");
});
对于同步方法
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');
});
})
});