在Python中将原始tweet字符串转换为JSON对象

时间:2017-03-18 03:45:05

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

我使用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)

但是我收到一条错误说"属性错误:' str'对象没有属性' get'"

所以我搜索并找到了一个解决方案,他们将json.dumps(tweet)的所有输出写入文件,使用json.loads(jsonfile)到变量,并尝试使用.get(&#34) ; 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对象中提取文本?

2 个答案:

答案 0 :(得分: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时,您使用 dump 加载,但使用单个JSON对象,您正在使用转储加载

答案 1 :(得分:0)

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

在你得到你的词典,列表和&条目,您解析特定值:
https://stackoverflow.com/a/42860573/3342050
这完全取决于返回的数据,
因为键对于该结构是唯一的。