【问题标题】:Convert a raw tweet string to a JSON object in Python在 Python 中将原始推文字符串转换为 JSON 对象
【发布时间】:2017-08-09 18:15:40
【问题描述】:

我正在使用 twitter 的 API 下载原始推文,以便我可以使用它们。他们在示例中给出的迭代器循环看起来像这样(我添加了一个 if 条件来运行循环 n 次,此处未显示):

iterator = twitter_stream.statuses.sample()
for tweet in iterator:
   print (json.dumps(tweet))
   break

这些命令以正确的格式输出整个 JSON 对象。

为了从原始推文 json 对象中提取“文本”项,我尝试在

上使用 .get("text") 运算符
txts = []
for tweet in iterator:
   txts.append((json.dumps(tweet)).get("text"))
   break
print (txts)

但我收到一条错误消息“AttributeError: 'str' object has no attribute 'get'”

所以我四处搜索并找到了一个解决方案,他们将 json.dumps(tweet) 的所有输出写入一个文件,使用 json.loads(jsonfile) 到一个变量,并尝试使用 .get("text" ) 运算符来加载文本:

fl = open("ipjson.json", "a")
for tweet in iterator:
   fl.write(json.dumps(tweet))
   break
fl.flush()
decode = json.loads(fl)

for item in decode:
   txt = item.get("text")
   txts.append(txt)
print (txts)

但这给了我另一个错误说“TypeError:JSON对象必须是str,而不是'TextIOWrapper'”

我做错了什么?有没有更好/更简单的方法从原始推文 JSON 对象中提取文本?

【问题讨论】:

  • 您能否提供print(json.dumps(tweet)) 的输出并指出您想从那里获得哪些确切数据?
  • 您不需要进行转储然后加载。该信息可能已经在推文变量中。

标签: python json python-3.x twitter twitter-oauth


【解决方案1】:

对于第一个示例,您不需要 JSON,您可以这样做:

txts = []
for status in statuses:
  txts.append(status.text)

对于第二个示例,您错误地处理了 JSON。你应该这样做:

txts = []
for status in statuses:
  txts.append(json.dumps(status))

with open('ipjson.json','w') as fou:
  json.dump(txts,fou)

然后再读一遍:

with open('ipjson.json','r') as fin:
  txts = json.load(fin)

for txt in txts:
  print(json.loads(txt)['text'])

请注意,当您编写和读取 JSON 时,您使用 dumpload,但您使用的是单个 JSON 对象 dumps em> 和 加载

【讨论】:

    【解决方案2】:

    JSON 文件需要递归扫描,
    https://stackoverflow.com/a/42855667/3342050
    或结构内的已知位置。

    在获得字典、列表和条目后,您可以解析特定值:
    https://stackoverflow.com/a/42860573/3342050
    这完全取决于返回什么数据,
    因为键对于该结构是唯一的。

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2011-07-14
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-07-21
      相关资源
      最近更新 更多