我正在尝试使用来自循环数据的 Node 编写 JSON 文件,例如:
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
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 文件不会随着时间的推移变得太大,您应该尝试:
创建一个包含表格数组的 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 的数据有效。超过此限制,您应该使用数据库引擎。
更新:
创建一个以字符串形式返回当前日期(年+月+日)的函数。创建名为此字符串 + .json 的文件。 fs 模块有一个函数可以检查文件是否存在,名为 fs.stat(path, callback)。 有了这个,您可以检查文件是否存在。如果存在,使用 read 函数,如果不存在,使用 create 函数。使用日期字符串作为路径,因为文件将被命名为今天的日期 + .json。回调将包含一个统计对象,如果文件不存在,该对象将为空。
https://stackoverflow.com/questions/36856232/
相关文章:
c# - 如何将 C# 匿名类型序列化为 JSON 字符串?
jquery - 为什么每个人都为 jQuery 选择 JSON 而不是 XML?
java - HttpServletRequest 获取 JSON POST 数据
java - 在 Java 中将 XML 转换为 JSON 的最快方法
python - 为什么我看到 "TypeError: string indices must be
javascript - JSON 省略了 Infinity 和 NaN; ECMAScript 中