如何从Django返回的requests响应对象中解析提取指定字段属性
正确获取
somekey的方案 核心原因
问题根因是Django侧返回格式不规范:返回代码里用{res.json().get('access_token')}生成的是Python集合(不是字典),最终序列化后得到的是嵌套数组结构,且数组内层存储的是JSON格式字符串,不是结构化的JSON对象。
前端临时解决代码
不需要修改后端的前提下,按如下步骤取值即可:
import json import requests # 原有请求逻辑 url = 'http://localhost:8000/some-endpoint' body = { 'key': 'val' } response = requests.post(url, json=body) # 层级解析取值 # 1. 先把响应整体转为JSON结构,得到外层嵌套数组 outer_list = response.json() # 2. 取出内层的JSON字符串 inner_json_str = outer_list[0][0] # 3. 把字符串反序列化为字典 inner_dict = json.loads(inner_json_str) # 4. 直接取目标字段 somekey_value = inner_dict['somekey']
根治方案(修改Django侧返回逻辑)
把返回的集合改为标准字典结构,后续前端可以直接取值:
# 修正后的Django返回代码 return Response({ "somekey": res.json().get('access_token'), "expires_in": 86400 }, status=200)
修改后前端只需要一行代码即可取值:
somekey_value = response.json()['somekey']
之前报错的原因说明
response.json()报错:早期返回格式存在不可哈希的字典元素,触发序列化异常json.dumps(response).json():response是requests库的Response对象,不能直接被JSON序列化response[0]['somekey']:Response对象不是列表/字典类型,不支持下标访问response.get('somekey'):Response对象没有内置get方法,该方法是字典的专属方法response.text.json():response.text是字符串类型,只有Response对象才有json()方法
内容的提问来源于stack exchange,提问作者ang
相关产品推荐
相关产品推荐

