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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:25:58