JSON 在 fs.writeFile() 之后吓坏了?
JSON freaking out after fs.writeFile()?
我有这个 database.json
文件要写入
最初看起来像这样
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": [
]
},
{
"id": "533910695495073792",
"credit": 15,
"cooldowns": [
]
}
]
}
但是写入之后,格式会突然变乱,变成这样:
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": []
},
{
"id": "533910695495073792",
"credit": 30,
"cooldowns": []
}
]
} "QUIZ": 1636251021979
}
]
}
]
}
这是我的代码:
fs.readFile(database_name, "utf-8", (err, data) => {
if(err) return console.log(err);
obj = JSON.parse(data);
const cooldowns = obj.users[obj.users.findIndex(v => v.id === user)].cooldowns;
if(!cooldowns.QUIZ)
{
cooldowns.push({ "QUIZ": new Date().getTime() + 86400000 })
}
json = JSON.stringify(obj, null, 4);
console.log(json);
fs.writeFile(database_name, json, "utf-8", () => {})
})
奇怪的是console.log returns
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": []
},
{
"id": "533910695495073792",
"credit": 30,
"cooldowns": [
{
"QUIZ": 1636251021979
}
]
}
]
}
这就是我想要的。
更奇怪的是,有时写入文件会起作用,而其他时候则不起作用。有任何想法吗?谢谢
P.S。唯一搞砸的是 JSON 格式;没有返回其他错误,并且所有变量都已声明并正常工作
基本上我意识到我同时在多个进程中写入文件,所以一切都吓坏了。
解决方法是使用writeFileSync()
然后同步更新JSON文件,防止两个进程同时运行。
或者如果需要同时写入一个文件,只需要使用数据库即可。
妈的现在我觉得自己很蠢
编辑:
正如 Brad 指出的那样,您还可以在写入文件时锁定文件,这样写入就不需要同步了。无论哪种方式,只是不要同时写入同一个文件。
我有这个 database.json
文件要写入
最初看起来像这样
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": [
]
},
{
"id": "533910695495073792",
"credit": 15,
"cooldowns": [
]
}
]
}
但是写入之后,格式会突然变乱,变成这样:
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": []
},
{
"id": "533910695495073792",
"credit": 30,
"cooldowns": []
}
]
} "QUIZ": 1636251021979
}
]
}
]
}
这是我的代码:
fs.readFile(database_name, "utf-8", (err, data) => {
if(err) return console.log(err);
obj = JSON.parse(data);
const cooldowns = obj.users[obj.users.findIndex(v => v.id === user)].cooldowns;
if(!cooldowns.QUIZ)
{
cooldowns.push({ "QUIZ": new Date().getTime() + 86400000 })
}
json = JSON.stringify(obj, null, 4);
console.log(json);
fs.writeFile(database_name, json, "utf-8", () => {})
})
奇怪的是console.log returns
{
"users": [
{
"id": "470055904063127552",
"credit": 10,
"cooldowns": []
},
{
"id": "533910695495073792",
"credit": 30,
"cooldowns": [
{
"QUIZ": 1636251021979
}
]
}
]
}
这就是我想要的。
更奇怪的是,有时写入文件会起作用,而其他时候则不起作用。有任何想法吗?谢谢
P.S。唯一搞砸的是 JSON 格式;没有返回其他错误,并且所有变量都已声明并正常工作
基本上我意识到我同时在多个进程中写入文件,所以一切都吓坏了。
解决方法是使用writeFileSync()
然后同步更新JSON文件,防止两个进程同时运行。
或者如果需要同时写入一个文件,只需要使用数据库即可。
妈的现在我觉得自己很蠢
编辑: 正如 Brad 指出的那样,您还可以在写入文件时锁定文件,这样写入就不需要同步了。无论哪种方式,只是不要同时写入同一个文件。