Python读取JSON提取tmdb_id并循环处理时遇类型错误求助
解决JSON字符串数字键的循环处理问题
问题场景
你有一个顶层为字典、键是字符串类型数字的JSON文件,需要循环提取每个条目的tmdb_id发起API GET请求,再把响应参数写回原JSON,但使用for i in data['0']:时触发TypeError: list indices must be integers or slices, not str错误。
错误原因
data['0']返回的是单个电影条目字典,遍历它会拿到字典的键(如id、title),而非你预期的索引值,后续用这些字符串键当作列表索引时就会报错。
正确处理方案
方法一:直接遍历所有电影条目(推荐)
通过data.values()直接获取所有电影对象,无需关心顶层的字符串数字键:
import json import requests # 读取JSON文件 with open('your_movies.json', 'r', encoding='utf-8') as f: movie_data = json.load(f) # 循环处理每一条电影数据 for movie in movie_data.values(): # 提取tmdb_id tmdb_id = movie['tmdb_id'] # 构造API请求URL(替换为你的实际API地址和密钥) api_url = f'https://api.themoviedb.org/3/movie/{tmdb_id}?api_key=YOUR_API_KEY' # 发送GET请求并处理响应 response = requests.get(api_url) if response.status_code == 200: api_response = response.json() # 将API返回的字段添加回当前电影条目(示例添加overview字段) movie['overview'] = api_response.get('overview', '暂无简介') else: print(f"请求失败:tmdb_id={tmdb_id},状态码={response.status_code}") # 将更新后的数据写回JSON文件 with open('updated_movies.json', 'w', encoding='utf-8') as f: json.dump(movie_data, f, indent=4, ensure_ascii=False)
方法二:遍历字符串数字键并取值
如果需要保留原顶层键的关联关系,可以遍历所有键再获取对应电影对象:
import json import requests with open('your_movies.json', 'r', encoding='utf-8') as f: movie_data = json.load(f) for key in movie_data.keys(): movie = movie_data[key] tmdb_id = movie['tmdb_id'] # 后续API请求和数据更新逻辑同方法一
内容的提问来源于stack exchange,提问作者Thegasman2000
相关产品推荐
相关产品推荐

