var jsonfile = require('jsonfile');
var data = require('./data.json');
var items = data.items;
data.items[items.length] = {
msg: "A new message"
};
jsonfile.writeFile('./data.json', data, {
spaces: 2
}, function(err) {
console.error(err);
});

{
"items": [ {
"name": "Tom", "time": "7.4.2016 3:13PM", "msg": "message1"
}
,
{
"name": "Tom", "time": "7.4.2016 3:13PM", "msg": "message2"
}
,
{
"name": "Tom", "time": "7.4.2016 3:13PM", "msg": "message3"
}
]
}

我需要使用node.js维护一个json文件,其数据样式与上面的代码类似。我应该不断将对象添加到"项目"阵列。但是,如果我采用上面代码中的方法,我每次要添加新项目时都必须加载并保存整组数据。
所以我的问题是:是否有方法直接操作json文件,没有加载和保存整个数据的麻烦(就像处理数据库系统一样)?
答案 0 :(得分:1)
如果您发现自己正在加载并保存一大堆数据"并且正在寻找附加json的方法,这是一个需要数据库的标志。
有典型的mongodb等服务器。但是,如果您的需求很简单,您还可以查看简单的嵌入式数据库,例如NEDB。这个(以及其他嵌入式数据库)是基于文件的数据库,他们已经为您解决了这个问题。没有理由像数据库系统一样'。只需使用一个:)
如果你不得不采用文件方法的另一种可能性是写单个文件,或者如果文件太多,那么你就可以编写"页面"的项目。但可行性取决于您的阅读模式。
但是再一次,如果你在这个状态下问这些问题,数据库可能更合适。
答案 1 :(得分:0)
你不能真的,只要文件看起来像那样(意味着你正在将样式应用于输出)。如果你只是每行只有一个“条目”,那么你可能可以轻松追加(这是你没有spaces: 2
时应该得到的),那么你可以:
fs.appendFile('./foo.json', JSON.stringify(obj) + '\n', callback);
在没有JSON.parse()
和后续JSON.stringify()
的情况下追加。