我使用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对象中提取文本?
答案 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
这完全取决于返回的数据,
因为键对于该结构是唯一的。