You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord前缀命令机器人JSON解码错误求助:Expecting value报错

问题分析与解决方法

错误原因

你遇到的Expecting value: line 1 column 1 (char 0) JSON解码错误,本质是请求返回的内容不是有效的JSON格式,常见触发场景:

  • 请求被目标API的反爬机制拦截,返回了Cloudflare验证页面、HTML错误页这类非JSON内容
  • 未携带必要请求头(比如User-Agent),API拒绝请求并返回错误文本
  • 网络波动导致响应为空,没有任何可解析的内容

解决步骤

  1. 排查实际响应内容:在解析JSON前,打印响应的状态码和原始文本,确认返回的到底是什么
  2. 添加请求头模拟正常访问:给请求加上浏览器类型的User-Agent,避免被反爬拦截
  3. 优化重试逻辑:每次失败后添加延迟,防止频繁请求被API封禁
  4. 校验响应状态码:只有当请求成功(状态码200)时再尝试解析JSON

优化后的代码

import requests
import time
from discord.ext import commands

@bot.command(pass_context=True)
async def roulette(ctx: any):
    roulette = False
    # 模拟浏览器的请求头
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    while not roulette:
        try:
            bloxflip = requests.get('https://api.bloxflip.com/games/roulette', headers=headers)
            # 打印状态码和响应内容,用于排查问题
            print(f"状态码: {bloxflip.status_code}")
            print(f"响应内容: {bloxflip.text[:500]}")  # 只打印前500字符避免刷屏
            
            # 只有状态码200时才解析JSON
            if bloxflip.status_code == 200:
                data = bloxflip.json()
                roulette = True
                # 这里可以添加后续处理逻辑,比如使用data变量
                print("API请求成功")
            else:
                print(f"请求失败,状态码: {bloxflip.status_code}")
                time.sleep(2)  # 失败后延迟2秒再重试
        except requests.exceptions.JSONDecodeError as e:
            print(f"JSON解码失败: {e}")
            time.sleep(2)
        except requests.exceptions.RequestException as e:
            print(f"请求异常: {e}")
            time.sleep(2)

内容的提问来源于stack exchange,提问作者saab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:15:23