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

Python json.loads解析requests返回对象列表报TypeError问题

问题原因

报错的核心是混淆了requests响应方法的返回值类型,以及json模块两个核心方法的入参规则:

  • response.json()是requests内置的JSON反序列化方法,会自动把接口返回的JSON格式原始响应(字符串/字节流)转换成Python原生数据结构。你的接口返回的是JSON数组,因此response.json()执行后得到的直接是Python list对象,不是未解析的JSON原始文本。
  • json.loads()的入参要求是JSON格式的字符串、字节或字节数组,作用是把这类原始JSON内容反序列化为Python对象。你传入已经解析完成的list类型数据,自然会触发类型错误。
  • json.dumps()的入参要求是Python原生数据结构,作用是把这类对象序列化为JSON格式字符串,因此传入response.json()返回的列表完全符合要求,能正常输出格式化结果。

其他开发者用json.loads()能正常运行,是因为他们传入的是response.text(原始响应字符串)或response.content(原始响应字节),这两类才是json.loads()支持的入参,和你传入已解析Python对象的场景完全不同。

修复方案

你不需要额外调用json.loads(),直接使用response.json()的返回值即可,修正后的参考代码:

import requests
import json
# 可选:关闭verify=False时弹出的不安全请求警告
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

def get_groups(url):
  response = requests.get(url + "/groups", verify=False)
  print("status code:", response.status_code)
  # 直接获取解析完成的列表数据
  groups = response.json()
  print("JSON:\n")
  print(json.dumps(groups, indent=2))

  # 后续直接操作groups列表即可,无需额外解析
  for group in groups:
    print(f"群组ID: {group['id']}, 群组名: {group['name']}")
等价写法说明

以下三种写法最终拿到的结果完全一致,response.json()本质上就是封装了json.loads()处理原始响应的逻辑:

# 写法1:使用requests内置解析方法(推荐,最简洁)
groups = response.json()
# 写法2:手动传入原始响应字符串解析
groups = json.loads(response.text)
# 写法3:手动传入原始响应字节解析
groups = json.loads(response.content)

这个报错和Python 3.10.2版本、接口返回的JSON内容格式无关,纯粹是重复解析+入参类型不匹配导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:30:47