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

调用GET接口时r.json()触发JSON Decode Exception,求解决方案

解决JSON Decode Exception问题

你的代码如下:

import requests
import json

URL = "http://127.0.0.1:8000/TESTGET_api/"


def get_data(id = None):
    data = {}
    if id is not None:
        data = {'id':id}
    json_data = json.dumps(data)
    r = requests.get(url= URL, data = json_data )
    data = r.json()
    print(data)        
get_data()

触发JSON Decode Exception的核心原因有两个:

  1. GET请求的规范是通过URL查询参数传递数据,而非请求体。你用data参数传入JSON字符串,后端可能无法正确解析这个请求,导致返回非JSON格式的响应(比如错误页面、空内容)。
  2. 即使后端支持GET请求读请求体,你也没设置Content-Type: application/json请求头,requests默认会把data参数的内容当成表单数据发送,后端同样无法识别为JSON。

解决方案

方案1:用查询参数传递数据(推荐,符合REST规范)

把id放在URL的查询字符串里,不需要JSON序列化,这是GET请求传递参数的标准方式:

import requests

URL = "http://127.0.0.1:8000/TESTGET_api/"

def get_data(id=None):
    params = {'id': id} if id else {}
    r = requests.get(url=URL, params=params)
    
    # 先检查请求是否成功,再解析JSON
    print(f"响应状态码: {r.status_code}")
    print(f"响应内容: {r.text}")
    
    try:
        data = r.json()
        print(data)
    except Exception as e:
        print(f"JSON解析失败原因: {str(e)}")
        
get_data()

方案2:强制发送JSON格式的GET请求体(不推荐)

如果后端明确要求GET请求携带JSON请求体,需要手动设置请求头:

import requests
import json

URL = "http://127.0.0.1:8000/TESTGET_api/"

def get_data(id=None):
    data = {'id': id} if id else {}
    json_data = json.dumps(data)
    headers = {'Content-Type': 'application/json'}
    
    r = requests.get(url=URL, data=json_data, headers=headers)
    
    print(f"响应状态码: {r.status_code}")
    print(f"响应内容: {r.text}")
    
    try:
        data = r.json()
        print(data)
    except Exception as e:
        print(f"JSON解析失败原因: {str(e)}")
        
get_data()

调试建议

  • 先看r.status_code:如果是4xx(比如400、404)或5xx,说明请求本身就失败了,后端返回的不是JSON,而是错误页面或提示文本,这时候要先排查后端接口是否正常,或者请求参数是否符合要求。
  • 用r.text代替r.content:r.text会自动把字节内容解码为字符串,更直观看到返回的实际内容(比如是不是HTML错误页、空字符串)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:24:11