我的应用程序需要编写注册到JSON文件的新用户,以便稍后将此文件发送给用户。
我想要的是:
[
{"username": "A"},
{"username": "B"},
{"username": "C"}
]
当新用户" D"注册,NodeJS将文件更新为:
[
{"username": "A"},
{"username": "B"},
{"username": "C"},
{"username": "D"}
]
但是我在实施这个问题时遇到了问题,因为虽然我可以追加'对于该文件,我不能在结束之前写一个用户名']'。
我试过没有方括号和JSON.parse(arayFromFileRead),但它给了我一个
'意外令牌{'
错误。
有人可以帮忙:
谢谢。
答案 0 :(得分:2)
为了编写正确的JSON(并且能够使用JSON.parse
解析它),您需要在数组内的对象之间使用逗号。
[
{"username": "A"},
{"username": "B"},
{"username": "C"}
]
答案 1 :(得分:1)
查看此示例:
var fs = require('fs');
function addUser(user, callback) {
var usersFile = './users.json';
fs.readFile(usersFile, function(err, users) {
if (err) {
return (callback)? callback(err) : console.error(err);
}
users = (users)? JSON.parse(users) : [];
users.push(user);
fs.writeFile(usersFile, JSON.stringify(users), function(err, result){
(callback)? callback(err, result) : console.error(err);
});
});
}
addUser({username: 'D', password: 'blablabla'});
逻辑:
有一个users.json文件,我们将JSON.stringify()
函数序列化所有用户数据。
这样做你已经将整个文件读取到变量,解析它,将新记录推送到变量,序列化(stringify)并将其保存回文件
好处:
没有任何好处!当你的文件变大时你会浪费更多的内存和CPU来读取它,推送,序列化,回写。此外,您的文件将在读/写期间被锁定
更好地做到这一点:
1)创建用户文件夹
2)使你的代码像这样:
var fs = require('fs');
var path = require('path');
var md5 = require('md5');
var usersDir = './users';
function addUser(user, callback) {
var userFile = path.join(usersDir, md5(user.username)+'.json');
fs.writeFile(userFile, JSON.stringify(user), function(err, result){
(callback)? callback(err, result) : console.error(err);
});
}
addUser({username: 'D', password: 'blablabla'});
逻辑:您拥有用户文件夹,其中您保留用户记录"每个用户的文件"方式
好处:
当你有1个文件(users.json)你有并行访问同一个文件的问题。
但是当你的文件是独立的时,文件系统本身就是数据库,其中json文件是行,内容是文档。