如何使用json.reads(line)解析twitter feed数据

时间:2017-07-25 15:30:02

标签: python json twitter

我已经以JSON格式下载了大量的Twitter数据并将其保存到文本文件中。我现在想逐行阅读,并使用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"}}\\''

我觉得它应该有效,我一直盯着这个一个小时而没有任何进步!

1 个答案:

答案 0 :(得分:1)

您的字符串格式错误。我不确定你需要做些什么才能摆脱'b\\'(它真的没有意义),但是手动输入shell给我这个: / p>

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格式,因此您可能需要更正它。

更新:问题是数据是二进制格式,只需要用data.decode('utf-8')解码