我的知识记录

Python requests处理JSON接口返回:字典取值与解析示例

讲解用requests调用JSON API并用resp.json()把响应转成Python字典,逐层取字段、处理嵌套数据,适合对接天气、汇率、内部接口。

场景痛点

现在大多数后台接口返回的都是JSON,不是HTML网页。浏览器里看到的是一串花括号,手动复制出来粘到Excel里还得清洗。用requests拿到响应后调用 .json() 方法,直接变成Python字典,想要哪个字段就按key取,比解析HTML简单十倍。

用到的库

pip install requests beautifulsoup4 lxml

完整代码

# 导入requests
import requests

def call_json_api(city="北京"):
"""调用一个公开的JSON接口并解析"""
# 用一个公开的JSON占位接口做演示
url = "https://httpbin.org/json"

resp = requests.get(url, timeout=10)

# 检查状态码
if resp.status_code != 200:
print("接口请求失败:", resp.status_code)
return None

# 关键一步:把响应体解析成Python字典/列表
data = resp.json()

# 打印整个结构看看
print("返回类型:", type(data))
print("顶层键:", list(data.keys()))

# 示例:假设返回里有一个slideshow字段,逐层往下取
if "slideshow" in data:
title = data["slideshow"].get("title", "无标题")
slides = data["slideshow"].get("slides", [])
print("幻灯片标题:", title)
print("幻灯片数量:", len(slides))

# 遍历列表
for i, slide in enumerate(slides, 1):
print(f"第{i}页:{slide.get('title')}(类型:{slide.get('type')})")

return data

def safe_get_nested(data, *keys, default=None):
"""安全地从嵌套字典里取值,任一层不存在就返回默认值"""
cur = data
for k in keys:
if isinstance(cur, dict) and k in cur:
cur = cur[k]
else:
return default
return cur

def main():
data = call_json_api()

# 演示安全取深层字段
if data:
value = safe_get_nested(data, "slideshow", "author", default="未知")
print("作者:", value)

if __name__ == "__main__":
main()

代码讲解

  • resp.json() 是requests内置方法,它会自动把响应体按UTF-8解析成Python对象(字典或列表),等价于 json.loads(resp.text)
  • 解析后就是普通的字典和列表,用 data["key"]data.get("key", 默认值) 取值,和操作本地数据没区别。
  • 嵌套结构用链式取值:data["a"]["b"]["c"],但中间任何一层缺key都会抛KeyError,所以写了个 safe_get_nested 工具函数做安全取值。
  • 调试时先 print(data) 看完整结构,再决定怎么取,不要凭想象写key。
  • 接口报错时也可能返回JSON(带错误码),所以先判断 status_code.json()

运行结果

运行后会打印返回类型(dict)、顶层键、幻灯片标题和每页标题,最后打印作者字段。如果某一层字段缺失,安全取值函数会返回默认值而不是崩溃。

注意事项

  • 接口返回的JSON可能是数组开头([...]),这时 resp.json() 得到的是列表,用 data[0] 取第一项。
  • 某些中文接口用GBK编码,.json() 可能乱码,先设置 resp.encoding='utf-8' 再解析。
  • 高频调用第三方免费接口可能被限流,注意缓存结果,不要重复请求。
  • 企业内部接口通常需要token或签名,放在Headers里传。

Python requests处理JSON接口返回:字典取值与解析示例

标签:

更新时间:2026-09-14 20:48:32

上一篇:Python requests爬取分页数据:循环翻页与停止条件

下一篇:Python requests带Headers模拟浏览器:解决403反爬基础篇