服务器端“JSON 输入意外结束”错误

Posted

技术标签:

【中文标题】服务器端“JSON 输入意外结束”错误【英文标题】:Server-side "Unexpected end of JSON input" error 【发布时间】:2020-11-15 13:59:00 【问题描述】:

对于这个机器人,我有一个包含所有用户信息的 JSON 文件;它形成正确;这不是问题...

我还在服务器上运行机器人,所以它可以 24/7 全天候运行;但是当我在笔记本电脑上处理它时,我把它关掉了。我使用 GitHub 存储库保持我的代码同步,并且我经常推送/拉取我的更改。这也不是问题...

问题是,当我从笔记本电脑运行它时,一切都很好。该机器人可以正常工作,没有任何问题;但是当我从服务器运行它时,从机器人的存储库中提取我的代码,所以一切都与我笔记本电脑上的完全相同,每当我尝试使用特定命令时,我都会不断收到“JSON 输入意外结束”错误。

读取错误,它表明错误不是命令本身,而是它使用 module.exports 调用的另一个文件中的函数,特别是该文件读取包含用户信息的 JSON 文件的地方。

我正在使用以下代码行来解析 JSON(在笔记本电脑和服务器上):

let CycleSettings = JSON.parse(fs.readFileSync("./nicknames.json", "utf8"));

报错如下(服务器端):

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at Object.StartCycle (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/cycling.js:6:34)
    at Object.execute (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/commandsFolder/cycle.js:84:21)
    at Client.<anonymous> (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/index.js:105:17)
    at Client.emit (events.js:314:20)
    at MessageCreateAction.handle (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
    at WebSocketShard.onMessage (/home/hostingmain/Desktop/Discord Bots/Nick-Cycle/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)

奇怪的是,这个错误只发生在机器人在服务器端运行时,当我把它取下来,然后在我的笔记本电脑上重新启动它时,没有问题。

我还有 2 个其他机器人在同一台服务器上运行,但它们都没有给我这个问题。

验证代码是否相同;提取我的仓库后,我能够使用我刚刚在笔记本电脑、服务器上所做的一切(新命令、响应调整、功能调整等);但是由于相同的原因,相同的命令会发生相同的错误,但仅在服务器上。

更奇怪的是,这并不总是一个问题。大约一个月前,当我开始使用这个特殊功能时;一切正常,无论是在我的笔记本电脑上还是从服务器上。从那以后我没有更改函数文件。

更奇怪的是,它不是 100%。有时我能够成功使用 buggy 命令,但这种情况很少见,而且完全随机。

我完全不知道是什么原因造成的,也不知道从哪里开始寻找...感谢任何帮助...

更新:我在服务器和笔记本电脑上都重新安装了 node.js(最新版本)。代码都没有改变,错误仍然没有出现在我的笔记本电脑上,但它出现在服务器上。同样,这两个地方的代码完全相同

编辑:这是我尝试解析的 JSON 的格式:(注意,我已将 ID 和值替换为占位符,以说明 JSON 的 格式,而没有实际披露用户信息)


     "Discord Server ID" 
          "Name": "Name of the Discord server (for my reference)",
          "users": 
               "Discord User ID": 
                    "nicknames": ["1", "2", "3"],
                    "interval": 300,
                    "started": false
               
          
     

【问题讨论】:

您能提供错误代码/错误日志的 sn-p 吗?另外,您使用的是什么服务器,它们使用的是相同的节点版本吗? 基本上,如果相同的代码在某处运行正常,而在其他地方没有运行,则显然代码所需的环境或其他因素不符合要求。在您的情况下,您的源 JSON 在服务器中似乎无效,但在您的笔记本电脑上是正确的。使用此在线验证器检查服务器端的 JSON 是否有效。 jsonformatter.org 添加了错误消息@theusaf 和发生错误的代码行。 @PubuduSitinamaluwa 我刚刚使用了你给我的那个网站,它说我的 json 是有效的。 你能分享一下你正在解析的 JSON 吗? 【参考方案1】:

读取错误,它表明错误不是命令本身,而是它使用 module.exports 调用的另一个文件中的函数,特别是该文件读取包含用户信息的 JSON 文件的地方。

显然,解决方案是在使用require('fs').readFileSync 之类的内容读取JSON 文件后记录其内容,然后再尝试将其解析为JSON。根据您提供的信息,这是下一步。

【讨论】:

以上是关于服务器端“JSON 输入意外结束”错误的主要内容,如果未能解决你的问题,请参考以下文章

PayPal 智能按钮和 REST Checkout SDK - SyntaxError:JSON 输入意外结束或期望传递订单 ID

Angular2 HTTP POST发生错误SyntaxError:JSON输入意外结束

Json 输入 Ionic 3 和 Angular 6 意外结束

XAMPP 返回错误“JSON 输入意外结束”

在“...ge-2.2.1.tgz”,“engin”附近解析时出现错误的 JSON 输入意外结束

创建反应应用程序:npm 错误!在“....”附近解析时 JSON 输入意外结束