因此,我正在为Discord机器人的命令编写一些代码,该命令将对象添加到存储在JSON文件中的对象数组中。这是实现以下目的的代码:
let rawdata = fs.readFileSync('config.json');
let blacklist = JSON.parse(rawdata);
var newWord = {"word": args[3], "count": 0}
blacklist.words.push(newWord);
let data = JSON.stringify(blacklist);
fs.writeFileSync('config.json', data);
这是在命令(args[3]
)中获得第四个单词,并将其放入对象({"word": args[3], "count": 0}
)中,然后将其添加到JSON文件中的对象列表中。可行,但是当我然后尝试获取此对象列表时,由机器人添加的对象将返回为undefined
。
这是JSON文件:
{"words":[{"string":"test","count":0},{"word":"abc","count":0}]}
列表{"string":"test","count":0}
中的第一个对象是我在创建文件时手动添加的,而第二个对象{"word":"abc","count":0}
是由漫游器添加的。
这是我用来获取对象列表的代码:
var words = ""
for (i = 0; i < blacklist.words.length; i++) {
words += "- " + blacklist.words[i].string + "\n";
console.log(blacklist.words[i].string);
}
message.reply("here are the words in your blacklist:\n" + words);
我对JavaScript还是很陌生,并且在异步特性方面遇到了麻烦,所以我确定自己做错了什么。
答案 0 :(得分:2)
如果仔细观察,您会在JSON生成的文件中定义两个不同的键:string
和word
。在这种情况下,您只会看到string
的值为test
。另一个对象没有string
的密钥。
您可以做的是1.更改键以使其匹配或2.通过内联if / else使用两个键。
for (i = 0; i < blacklist.words.length; i++) {
words += "- " + blacklist.words[i].string + "\n";
console.log(blacklist.words[i].string || blacklist.words[i].word);
}
答案 1 :(得分:1)
for (i = 0; i < blacklist.words.length; i++) { words += "- " + blacklist.words[i].string + "\n"; console.log(blacklist.words[i].string); }
此代码要访问黑名单对象的单词数组的“字符串”键。 检查您的JSON文件第二个元素的密钥,它不是“字符串”