将 Tweepy 状态对象转换为 JSON
Posted
技术标签:
【中文标题】将 Tweepy 状态对象转换为 JSON【英文标题】:Convert Tweepy Status object into JSON 【发布时间】:2015-03-10 03:05:08 【问题描述】:我正在使用Tweepy 下载推文。我有一个程序,然后将实际的Status
对象以文本形式写入文件。如何将其转换为 JSON,或将此对象导入回 Python?我尝试使用 JSON 库进行编码,但 Status 不是 JSON 可序列化的。
【问题讨论】:
我做了,我试过使用 JSON 库,但对象不是 JSON 可序列化的 【参考方案1】:tweepy 本身的 Status
对象不是 JSON 可序列化的,但它有一个包含 JSON 可序列化响应数据的 _json
属性。例如:
>>> status_list = api.user_timeline(user_handler)
>>> status = status_list[0]
>>> json_str = json.dumps(status._json)
【讨论】:
谢谢。我需要一段时间才能弄清楚,直到看到你的答案。 请注意,这是在 model 上设置的私有属性,在文档的任何地方都没有提到,也没有在代码的其他地方使用。因此,它可能有一天会被删除。但另一方面,只要它存在,您就可以使用它轻松地使用json.dumps([status._json for status in status_list])
创建整个列表的 json 转储。
@yoniLavi 是的,文档中没有提到它,而且很难找到。另一方面,这非常有用。当我们试图将原始数据转储到文件中时,我的一位队友发现了这一点。希望 tweepy 开发人员将来会添加此方法或与文档方法等效的方法。【参考方案2】:
更好的方法是使用 tweepy 解析器。它没有很好地记录 - 请参阅 Tweepy API reference - 但它是一个公共 API,比使用 _json
属性安全得多。
import tweepy
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, parser=tweepy.parsers.JSONParser())
status = api.user_timeline(user=username, count=1)[0]
json.dumps(status)
status
现在是一个 json 对象。
【讨论】:
这不是(不再是?)真的 我试过了:status =api.get_status(tweet_id)
它给了我:(<all_tweets_fields>) is not JSON serializable
如果可以的话,自己试试
但它应该是一个状态对象,所以我认为状态对象不是 JSON 可序列化的。
对于您发布的示例,它给了我同样的错误,所以即使对于 user_timeline
在 Python 3.7 中工作,它应该是首选的解决方案。【参考方案3】:
users = api.search_users('TimHortons', 1)
print(json.dumps(users[0]._json))
如果对象有 _json,则使用 json.dumps(users[0]._json)
。用户只是一个例子。
【讨论】:
以上是关于将 Tweepy 状态对象转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章