API响应写入JSON报错:AttributeError: 'dict' object has no attribute 'append'
解决JSON追加API响应时的AttributeError问题
错误原因
你遇到的AttributeError: 'dict' object has no attribute 'append'是因为代码里temp = data[0]取到的是JSON列表里的单个字典元素,而字典没有append方法。你的目标是把新的电影数据(字典)追加到整个列表中,不是往列表里的第一个字典里加内容。
修正后的代码
import json import requests fname = "NewdataTest.json" # 调用API获取电影数据 request_API = requests.get("https://api.themoviedb.org/3/movie/745?api_key=***") newData = request_API.json() def write_json(data, fname): with open(fname, "w") as f: json.dump(data, f, indent=4) try: # 尝试读取已有JSON文件 with open(fname, "r") as json_file: data = json.load(json_file) # 确保读取到的数据是列表(匹配目标结构) if not isinstance(data, list): data = [data] except FileNotFoundError: # 若文件不存在,初始化空列表 data = [] # 将新电影字典直接追加到列表中 data.append(newData) # 写入更新后的JSON数据 write_json(data, fname)
关键修正说明
- 移除了错误的
temp = data[0]和temp.append(y)操作,改为直接对列表data调用append(newData),符合目标JSON的数组结构要求 - 增加了文件不存在的处理逻辑,第一次运行时自动创建空列表并写入第一条数据
- 加入类型检查,避免文件中意外存储单个字典导致后续追加报错
最终效果
运行后JSON文件会保持你需要的数组结构,每次API调用都会在数组末尾追加新的电影字典,示例结构如下:
[ { "adult": false, "backdrop_path": "/e1cC9muSRtAHVtF5GJtKAfATYIT.jpg", // 第一条电影数据字段... }, { "adult": false, "backdrop_path": "/paUKxrbN2ww0JeT2JtvgAuaGlPf.jpg", // 新追加的电影数据字段... } ]
内容的提问来源于stack exchange,提问作者Thegasman2000
相关产品推荐
相关产品推荐

