使用Python3解析json文件

时间:2016-03-05 11:53:07

标签: python json python-3.x twitter

我使用Twitter的流API生成了一个.json文件。因此,我的.json文件有多个推文被包含为断开连接的json对象。在使用'jsonlint'验证后,我不断收到EOF错误。有没有可能围绕这个问题的工作。我最终的目标是在关键字和主题标签的基础上直观地分析Twitter趋势。以下是我的代码:

import json
import pandas as pd
import matplotlib.pyplot as plt


tweets_data_path = 'import_requests.txt'

tweets_data = []
tweets_file = open(tweets_data_path, "r")

for line in tweets_file:
  try:
    tweet = json.loads(line)
    tweets_data.append(tweet)
  except:
    continue

print(len(tweets_data))

tweets = pd.DataFrame()

tweets['text'] = map(lambda tweet: tweet['text'], tweets_data)

1 个答案:

答案 0 :(得分:1)

好吧,我最后拼凑了关于这个问题的所有点点滴滴.....并发现它一切按预期工作。至少在map()期间没有例外。 json文件解析确定。

在Python 2和3上使用pandas-0.16.2。

我在Python 3中注意到的一件事是map()返回一个map对象,而不是完全呈现的列表。所以数据框看起来像这样:

                              text
0   <map object at 0x7fd3a6a94f60>
1   <map object at 0x7fd3a6a94f60>
2   <map object at 0x7fd3a6a94f60>
....

对您或您的熊猫版本来说,这可能是个问题。

您可以使用列表解析来解决这个问题:

tweets['text'] = [tweet['text'] for tweet in tweets_data]

或将map()list()包裹在一起:

tweets['text'] = list(map(lambda tweet: tweet['text'], tweets_data))    

然后你应该得到这个:

>>> tweets
                                                 text
0   Tumi Inc. civil war: Staff manning US ceasefir...
1   #bigdata #SaaS RT CStoreNews_: (Cheat Sheet) D...
2   #bigdata #SaaS RT priyaank: 24 #DataScience, #...
3   #python dropbox_tools 1.2: A collection of com...
....