【发布时间】:2021-01-03 14:53:56
【问题描述】:
我有一些代码应该已经在 .json 文件中保存一个单词和其他单词,它 KINDA 完成了这项工作,它将文件(fs.readFileSync)读取为 const 并在使用 fs.WriteFileSync 保存时它只是像这样
我不知道它为什么会这样做,但它真的很烦人(readBl 是一个读取它并将它保存为变量的函数,所以当我想用命令读取它时,我知道我除了 IDC 之外,可以通过其他方式做到这一点)我的代码:
if(msg.content.startsWith('-addconf '))
{
var newword = msg.content.slice(9);
if(blacklisted.includes(newword))
return msg.channel.sendMessage("This word has already been blacklisted.")
let rawdata = fs.readFileSync('blacklist.json');
let rawRead = JSON.parse(rawdata);
const str = JSON.stringify(rawRead);
const str1 = str.replace('}', '');
const str2 = str1.replace('{"blacklist":', '');
//const str3 = str2.replace('""', '');
let balance = {
blacklist: str2 + newword
};
let data = JSON.stringify(balance);
fs.writeFileSync('blacklist.json', data);
readBl();
msg.channel.sendMessage("Added a blacklisted word, test it out.")
}
【问题讨论】:
-
读取文件功能:pastebin.com/GeE4ja2a
-
因为您要转换为 JSON 的字符串值已经包含双引号。这些需要转义才能成为有效的 JSON。简单示例:
console.log(JSON.stringify('string with "double quotes"'))。您正在对 JSON 数据进行字符串替换这一事实意味着您采用了错误的方法。你到底想达到什么目的?输入和预期输出是什么? -
反斜杠是转义字符。 JSON 必须转义引号和反斜杠。如果你使用 JSON.parse 转义字符应该消失。
-
同样,反斜杠是转义字符。想象一下,如果您在一组引号中放置多个引号。引号会相互抵消,导致奇怪的行为。反斜杠通知这些引号在您所做的引号内。这告诉计算机这些引号是您拥有的字符串的一部分,而不仅仅是另一个引号。
-
我想创建一个黑名单,所以如果你输入“-addconf
”它会将该单词保存到一个文件中,当机器人启动时(或者你添加一个新单词)它会保存黑名单作为一个 var,所以我可以稍后检查消息的内容中是否确实包含一些列入黑名单的单词。我怎样才能做到这一点? @Felix Kling
标签: javascript json discord discord.js fs