TypeScript开发Discord v13机器人解析JSON生成Embed报错如何解决?
问题排查与解决方案
错误原因
你的报错核心是传入JSON.parse的字符串不符合标准JSON格式:
标准JSON对象必须用英文大括号{}包裹所有键值对,你发送的命令参数里只有键值对没有外层大括号,解析器无法识别为JSON对象。你收到的SyntaxError: Unexpected token : in JSON at position 7错误正好对应这个问题:去掉命令前缀后的输入内容第一个值是字符串"title",JSON解析器预期字符串结束后是结束标记或者分隔逗号,却直接遇到了冒号,所以触发语法错误。
另外你的代码没有做异常捕获,JSON解析失败后直接抛出未捕获异常,所以机器人不会返回任何响应。
解决步骤
- 第一步:修正输入格式
发送命令时要传入完整合法的JSON对象,用大括号包裹所有键值对,示例输入:
注意所有符号都要使用英文半角,不要给JSON整体加额外引号。!createembed {"title": "Hello world", "description": "hello world"} - 第二步:给代码增加异常捕获逻辑,避免解析失败直接崩溃,同时给用户明确的错误提示:
修改后的命令代码如下:import { ICommand } from 'wokcommands'; import { MessageEmbed } from 'discord.js'; export default { category: 'Embeds', description: 'Creates a custom embed with JSON', aliases: ['newembed', 'embedcreate'], callback: ({ text, message }) => { try { const json = JSON.parse(text.trim()) const jsonEmbed = new MessageEmbed(json) return jsonEmbed } catch (err) { return `Embed生成失败,JSON格式错误:${(err as Error).message}\n请检查输入的JSON是否符合规范,完整JSON对象需要用{}包裹所有键值对。` } } } as ICommand - 第三步(可选排查):如果修正输入后仍然报错,可以在
JSON.parse前加一行console.log('收到的参数内容:', text),查看WOKCommands返回的text是否和你输入的内容一致,避免工具自动转义掉特殊字符导致格式异常。
内容的提问来源于stack exchange,提问作者PrezOfTheUnitedIdiots
相关产品推荐
相关产品推荐

