将原始推文字符串转换为Python中的JSON对象
问题描述:
我使用twitter的API下载原始推文,以便我可以与他们一起玩。他们在给例如迭代循环看起来像这样(我加了一个条件,如果运行循环n次,这里没有显示):将原始推文字符串转换为Python中的JSON对象
iterator = twitter_stream.statuses.sample()
for tweet in iterator:
print (json.dumps(tweet))
break
这些命令输出格式正确整个JSON对象。
要提取从原始鸣叫JSON对象“文本”项目,我尝试使用获得(“文本”)运营的
txts = []
for tweet in iterator:
txts.append((json.dumps(tweet)).get("text"))
break
print (txts)
,但我得到一个错误说“AttributeError的:“海峡'object has no attribute'get'“
所以我搜索了一遍,发现了一个解决方案,他们将json.dumps(tweet)的所有输出写入文件,将json.loads(jsonfile)用于变量,并且试图使用它的.get(“文本”)操作符来加载文本:
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对象中提取文本?
答
JSON文件需要递归扫描,在该结构内
https://stackoverflow.com/a/42855667/3342050
或已知位置。
后你会得到你的字典,列表,&条目,了解具体的值通过解析:
https://stackoverflow.com/a/42860573/3342050
这完全取决于返回什么数据,
因为密钥将独有的结构。
答
对于你不需要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使用转储和负载但与您使用的单个JSON对象转储和加载。
你能否提供'print(json.dumps(tweet))'的输出并指出你想从那里得到什么确切的数据? – niemmi
您不应该需要执行转储然后加载。该信息可能已经在推特变量中。 –