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

使用python-twitter存储Twitter趋势报错:json.loads无法处理list

问题分析与解决办法

这个错误的根源很明确——你搞反了JSON处理的方向,还误解了python-twitter库API返回的数据类型。

为什么会触发这个错误?

api.GetTrendsWoeid(my_woe_id)方法返回的不是JSON字符串,而是已经被库解析好的Python列表对象(里面是Trend类的实例)。而json.loads()的作用是把JSON格式的字符串/字节转换成Python对象,你直接把一个列表传给它,自然会触发类型错误。

正确的处理步骤

你不需要对返回的my_trends做JSON解析,直接使用这个列表即可。如果要把趋势数据写入文本文件,需要做的是把Python对象序列化成JSON字符串,而不是解析。

示例代码

import json
import twitter

# 先正确初始化API(替换成你的密钥信息)
api = twitter.Api(
    consumer_key="你的consumer_key",
    consumer_secret="你的consumer_secret",
    access_token_key="你的access_token_key",
    access_token_secret="你的access_token_secret"
)

my_woe_id = 1  # 示例:全球趋势的WOEID,可根据需求替换
my_trends = api.GetTrendsWoeid(my_woe_id)

# 把每个Trend对象转换成可序列化的字典
trends_dict_list = [trend.AsDict() for trend in my_trends]

# 将数据写入.txt文件(本质是JSON格式的文本)
with open("twitter_trends.txt", "w", encoding="utf-8") as f:
    json.dump(trends_dict_list, f, ensure_ascii=False, indent=4)

关键说明

  • trend.AsDict():python-twitter库返回的Trend对象自带这个方法,可以把对象转换成Python字典,这样才能被json.dump()正确序列化。
  • 如果你只是想保存纯文本格式的趋势名称(不是完整JSON),可以简化处理:
    with open("trends_names.txt", "w", encoding="utf-8") as f:
        for trend in my_trends:
            f.write(f"{trend.name}\n")
    

额外注意点

  • 确认你的my_woe_id是有效的,可以通过api.GetTrendsAvailable()获取所有可用的地区WOEID列表。
  • 确保API初始化的密钥、令牌信息正确,避免出现认证失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:48:17