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

Python解析requests返回的嵌套JSON列表访问key报KeyError问题咨询

问题原因与解决方法

1. KeyError 报错原因

你遇到的KeyError核心原因是要访问的key不在当前层级的字典中,需要严格按照JSON的嵌套结构逐层访问:

  • 最外层result是列表,每个元素result[i]是一级字典,仅包含created_at、id、entities等一级键
  • n_name、hashtag对应的text等键属于嵌套结构:result[i] → 一级键entities(值为二级字典) → 二级键user_ment/hashtags(值为列表) → 列表中每个元素是存储n_name/text的字典

你直接写result[3]['n_name'][0]跳过了entities和user_ment两层结构,自然会找不到key抛出异常。

2. 全量数据提取方法

步骤1:先确认完整结构

先打印完整的嵌套结构,明确所有key的层级:

import json
# 格式化打印第3条数据的完整结构
print(json.dumps(result[3], indent=2, ensure_ascii=False))

步骤2:逐层访问+容错处理

访问时严格按照层级书写,同时用dict.get()方法、列表长度判断做容错,避免不存在的key/索引导致程序崩溃:

import requests

url = 'https://api.example.com/'
bearer_token = 'my_token'
result = requests.get(
    url,
    headers={'Content-Type':'application/json','Authorization': f'Bearer {bearer_token}'}
).json()

# 遍历所有数据
for index, item in enumerate(result):
    # 提取一级字段
    created_at = item.get('created_at', '无创建时间')
    text = item.get('text', '无内容')
    print(f"第{index}条数据 创建时间:{created_at} 内容:{text}")

    # 提取嵌套的用户提及信息
    entities = item.get('entities', {})
    user_ment_list = entities.get('user_ment', [])
    for ment in user_ment_list:
        n_name = ment.get('n_name', '无用户名')
        print(f"提及用户:{n_name}")
    
    # 提取嵌套的标签信息
    hashtag_list = entities.get('hashtags', [])
    for tag in hashtag_list:
        tag_text = tag.get('text', '无标签内容')
        print(f"关联标签:{tag_text}")

3. 同名key提取方法

不同层级的同名key相互独立,只要按照目标key所在的层级访问即可。如果需要全局提取所有层级下同名key的所有值,可以用递归遍历实现:

def fetch_all_values_by_key(data, target_key):
    res = []
    if isinstance(data, dict):
        for k, v in data.items():
            if k == target_key:
                res.append(v)
            res.extend(fetch_all_values_by_key(v, target_key))
    elif isinstance(data, list):
        for item in data:
            res.extend(fetch_all_values_by_key(item, target_key))
    return res

# 示例:提取所有层级下所有n_name的值
all_n_names = fetch_all_values_by_key(result, 'n_name')
print(all_n_names)

4. 索引追加方式说明

你写的print(result[3]['n_name'][0])不可行,缺少中间层级。正确的访问写法如下,增加容错处理后不会报错:

# 基础写法(结构完全确定时使用)
print(result[3]['entities']['user_ment'][0]['n_name'])

# 带容错的写法(结构不确定时避免崩溃)
user_ment = result[3].get('entities', {}).get('user_ment', [])
if len(user_ment) > 0:
    print(user_ment[0].get('n_name', '无用户名'))
else:
    print('无提及用户')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:05