Discord Bot调用HTTP.Post创建公会日程事件报JSON无效错误
解决方案
先直接修改请求体里的channel_id字段:把当前写的数字值加上双引号,转为字符串类型,修正后的请求体如下:
{ "name": "The Bot created this!!!", "privacy_level": 2, "scheduled_start_time": "2022-06-15T15:00:00+00:00", "description": "The Bot also described this!!", "channel_id": "980830611458426901", "entity_type": 2 }
报错原因
返回50109无效JSON错误的核心原因是大整数类型不兼容:
Discord所有资源ID都是64位Snowflake格式,数值大小超过了JSON规范里双精度浮点数能精确表示的最大整数(2^53-1),你传入的980830611458426901远大于这个阈值,直接以数字字面量写在JSON里时,不管是Postman的序列化环节还是Discord服务端的解析环节,都会出现精度丢失,直接被判定为非法JSON结构,根本不会进入后续的字段校验流程。
补充排查点
如果改完ID类型还是报错,检查Postman的请求配置:
- 发送请求时必须在请求头里携带
Content-Type: application/json - 请求体选择raw格式,不要选form-data、x-www-form-urlencoded等表单格式
你当前配置的其他字段完全符合要求:entity_type=2对应语音频道类事件,不需要额外传entity_metadata字段,privacy_level=2是合法的公开事件权限值,时间格式也满足ISO8601标准,修正ID类型后即可正常创建事件。
如果是写代码实现,不要手动拼接JSON字符串,用对应语言的原生JSON序列化方法生成请求体,所有ID字段统一存为字符串类型再传入序列化方法,避免大整数精度问题。
内容的提问来源于stack exchange,提问作者DimKewl
相关产品推荐
相关产品推荐

