【问题标题】:Need help getting JSON.parse() to work (Discord Bot)需要帮助让 JSON.parse() 工作 (Discord Bot)
【发布时间】:2020-11-15 01:00:29
【问题描述】:

我有一个单独的 JSON 文件,链接为

const Players = require('./Database/Players.json');

和一个通过代码的praser

client.on('message', message => {


    if (message.content.toLowerCase() ==='smack activate') {
        
        let PlayerData = [message.author.username];

        Activate [message.author.username] = {
        AccountActive: 1,
        Health: 100,
        Level: 1,
        Lust: 0,
        Items: ""
        };

        var parsedata = JSON.parse(Players)   // <-----------
        if (parsedata.PlayerData.accountactive === 1) {
            message.channel.send ("Account Already Activated");
            return;
        }

        fs.writeFile("./Database/Players.json", JSON.stringify (Activate, null, 4), err => {
            if (err) throw err;
            message.channel.send ("Account Activated")
        });
    };

但似乎没有任何效果.. 我究竟做错了什么? 我收到此错误消息

undefined:1
[object Object]
 ^

【问题讨论】:

  • 既然已经是JSON数据,为什么还要解析呢。
  • @DeekshithHegde 如果我不解析它,我会收到一条错误消息,指出 if (Players.PlayerData.accountactive = 1) {} 中的 = 符号错误

标签: javascript node.js json discord.js


【解决方案1】:

看看require 是如何工作的。如文档中所述: https://nodejs.org/api/modules.html#modules_all_together

LOAD_AS_FILE(X)

  1. 如果 X 是文件,则加载 X 作为其文件扩展名格式。停止
  2. 如果 X.js 是文件,则将 X.js 作为 JavaScript 文本加载。停止
  3. 如果 X.json 是文件,则将 X.json 解析为 JavaScript 对象。停止
  4. 如果 X.node 是文件,则将 X.node 作为二进制插件加载。停止

所以你不应该调用JSON.parse,因为require会自动将json模块解析成JavaScript对象。

【讨论】:

  • 我知道这很有帮助。所以我确实取出了 JSON.parse,但现在收到 = 符号错误的错误
  • @Yuzi 我明白了,能不能把Players 变量的内容打印到控制台分享到这里(如果不包含敏感信息)?
  • 是的,我可以为你做到这一点
【解决方案2】:

据我了解,您正在尝试执行以下操作:

  1. 检查消息作者是否为已激活帐户的已知玩家。
  2. 如果是 - 发送帐户已激活的消息并返回。
  3. 否则 - 将新玩家数据添加到已知玩家。

您可能可以通过以下方式做到这一点:

const Players = require('./Database/Players.json');

client.on('message', message => {
  if (message.content.toLowerCase() === 'smack activate') {

    const PlayerData = Players[message.author.username];

    if (PlayerData && (PlayerData.AccountActive === 1)) {
      message.channel.send("Account Already Activated");
      return;
    }

    Players[message.author.username] = {
      AccountActive: 1,
      Health: 100,
      Level: 1,
      Lust: 0,
      Items: ""
    };

    fs.writeFile("./Database/Players.json", JSON.stringify(Players, null, 4), err => {
      if (err) throw err;
      message.channel.send("Account Activated")
    });
  };

})

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2017-09-22
    • 2015-02-11
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多