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

使用_json将推文写入JSON文件时遭遇AttributeError问题求助

解决AttributeError: 'SearchResults' object has no attribute '_json'问题

嘿,这个问题我之前也碰到过,咱们一步步来搞定它!

错误原因分析

你遇到的问题主要出在两个地方:

  1. 列表添加方式错误:api.search()返回的是SearchResults对象(本质是包含多个Tweet的可迭代集合),但你用了searched_tweets.append(new_tweets),这会把整个SearchResults集合作为单个元素塞进列表里。之后遍历searched_tweets时,你其实在尝试序列化整个集合,而不是单个Tweet对象,自然会找不到_json属性。
  2. Tweet对象不可直接序列化:即使拿到单个Tweet对象,直接用json.dump(tweet, f)也不行,因为Twitter API返回的Tweet对象是自定义类实例,不是JSON可序列化的类型,得用它自带的_json属性获取可序列化的字典。

修正后的代码

import json

searched_tweets = []
new_tweets = api.search(q=query, count=remaining_tweets, since_id=str(since_id), max_id=str(max_id))
# 用extend代替append,把每个Tweet对象单独加入列表
searched_tweets.extend(new_tweets)

def write_tweets(tweets, filename):
    with open(filename + ".json", "w") as f:
        for tweet in tweets:
            # 序列化Tweet对象的_json属性(这是一个可序列化的字典)
            json.dump(tweet._json, f)
            f.write('\n')

write_tweets(searched_tweets, "testfile")

关键改动说明

  • extend替代append:extend()会把new_tweets里的每个Tweet对象逐个添加到searched_tweets列表中,而不是把整个集合作为一个元素添加,这样后续遍历的时候拿到的就是单个Tweet对象。
  • 使用tweet._json:每个Tweet对象的_json属性存储了该推文的所有数据(以Python字典形式),这个字典可以直接被json.dump()序列化写入文件。

如果之后你需要更美观的JSON格式(比如换行缩进),也可以给json.dump()加上indent参数:

json.dump(tweet._json, f, indent=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:56