Python 如何使用json.reads(第行)解析twitter提要数据
我下载了大量JSON格式的twitter数据,并将其保存到一个文本文件中。现在我想逐行阅读,并使用Python 如何使用json.reads(第行)解析twitter提要数据,python,json,twitter,Python,Json,Twitter,我下载了大量JSON格式的twitter数据,并将其保存到一个文本文件中。现在我想逐行阅读,并使用json.reads()将其解码到字典中 我唯一的问题是它在第一行抛出一个错误,我假设这意味着函数不认为数据是JSON?我在这篇文章的底部加了一行我想解码的内容。当我只打印代码行时,代码工作正常,只有json.reads()函数抛出错误 代码如下: def decodeJSON(tweet_data): for line in tweet_data: parsedJSON
json.reads()
将其解码到字典中
我唯一的问题是它在第一行抛出一个错误,我假设这意味着函数不认为数据是JSON?我在这篇文章的底部加了一行我想解码的内容。当我只打印代码行时,代码工作正常,只有json.reads()
函数抛出错误
代码如下:
def decodeJSON(tweet_data):
for line in tweet_data:
parsedJSON = json.loads(line)
print(parsedJSON) # I just want to print for now to confirm it works.
以下是错误:
File "/Users/cc756/Dropbox/PythonProjects/TwitterAnalysisAssignment/tweet_sentiment.py", line 17, in analyseSentiment
parsedJSON = json.loads(line) File "/Users/cc756/anaconda/envs/tensorflow/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s) File "/Users/cc756/anaconda/envs/tensorflow/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/Users/cc756/anaconda/envs/tensorflow/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这是第一个字符串:
'b\\'{"delete":{"status":{"id":805444624881811457,"id_str":"805444624881811457","user_id":196129140,"user_id_str":"196129140"},"timestamp_ms":"1500994305560"}}\\''
我觉得应该行得通,我已经盯着这个看了一个小时,没有任何进步 您的字符串格式错误。我不确定您需要做什么才能在开始时摆脱
'b\\\'
(这没有真正意义),但手动将其键入shell会给我以下信息:
In [119]: json.loads(b'{"delete":{"status":{"id":805444624881811457,"id_str":"80
...: 5444624881811457","user_id":196129140,"user_id_str":"196129140"},"time
...: stamp_ms":"1500994305560"}}')
Out[119]:
{u'delete': {u'status': {u'id': 805444624881811457,
u'id_str': u'805444624881811457',
u'user_id': 196129140,
u'user_id_str': u'196129140'},
u'timestamp_ms': u'1500994305560'}}
对不起,我想发表评论,但想象一下这篇文章中的评论…:)
我不确定您将字符串粘贴到问题中是怎么回事,但它遵循的Python格式无效,因此您可能需要更正
更新:问题是数据是二进制格式的,只需要使用
数据进行解码。解码('utf-8')
这就是第一行的输出吗json.loads
将无法解析它。@CoryMadden b'{“delete”:{“status”:{“id”:8054446248811457,“id_str”:“8054446248811457”,“user_id”:196129140,“user_id_str”:“196129140”},“timestamp_ms”:“1500994305560”}“这正是我从推特订阅源中提取并保存的内容:s从pycharm复制到问题似乎有点变化,但我只是从文本文件中得到的。@ChrisCollins不会在注释中添加代码/数据。”。编辑您的问题并相应地设置格式,使其更易于阅读。@ChrisCollins有了这个字符串,我就可以很好地使用json.loads了。看看我的答案。谢谢你的回复!所以这很奇怪。你说使用我在对我的原始问题json.loads()的评论中发布的字符串效果很好。。。这是否意味着它不能正确地加载到python中?我使用open()打开文本文件,然后使用一个for循环遍历每一行。。令人困惑是的,它可能是\\`
,如果它实际上是加载的字符串的一部分。我建议在尝试调用json.loads
之前打印该行,以确保它确实是一个有效的json行,并且它不会试图向函数传递空字符串。你可以用line.replace(“\\”,”)
如果我从字符串中删除第一个和最后两个字符,我会有收获。。奇怪的是,它们就在那里。它可能只是一个分隔符,所以你可以打开整个文件,并在斜杠上拆分它。例如lines=file.read();tweet\u data=lines.split(“\\”)
Awesome。我很高兴你拿到了。我更新了我的帖子,为未来的人们反映这一点。