在python中读取JSON文件:ValueError

时间:2017-07-19 06:12:37

标签: python json twitter tweepy

我有一个带有70 + k json对象的.txt文件,它是通过从twitter提取数据并使用以下方式转储到文件中获得的:

with open("followers.txt", 'a') as f:
     for follower in limit_handled(tweepy.Cursor(api.followers, screen_name=account_name).pages()):
         for user_obj in follower:
             json.dump(user_obj._json, f)  
             f.write("\n")  

当我尝试使用下面的代码在python中读取它时:

import json
with open('followers.txt') as json_data:
     follower_data = json.load(json_data)

我收到错误:

ValueError: Extra data: line 2 column 1 - line 2801 column 1 (char 1489 - 8679498)

当我使用上面相同的代码读取一个从原始文件复制的json对象的测试文件时,它有效。一旦我向该文件添加第二个json对象,然后使用上面相同的代码就会出现错误:

ValueError: Extra data: line 2 column 1 - line 2 column 2376 (char 1489 - 3864)

如何使用多个json对象读取文件?

2 个答案:

答案 0 :(得分:2)

当您编写JSON时会出现问题。您必须编写单个JSON对象,因此您还可以加载单个JSON对象。目前,您正在编写多个单独的对象,从而导致错误。

稍微修改你的写代码:

json_data = []
with open("followers.txt", 'a') as f:
     for follower in limit_handled(tweepy.Cursor(api.followers, screen_name=account_name).pages()):
         for user_obj in follower:
             json_data.append(user_obj._json)             

     # outside the loops
     json.dump(json_data, f)  

现在,在阅读时,您的现有代码应该可行。你会得到一个词典列表。

答案 1 :(得分:1)

当然最好从根处理问题:按照COLDSPEED的建议写一个json并阅读它。
但是,如果您已将多个json对象写入单个文件,则可以尝试使用以下代码来使用已创建的文件:

import json
follower_data = []  # a list of all objects
with open('followers.txt') as json_data:
  for line in json_data:
    follower_data.append( json.loads(line) ) 

假设你在json对象写入'flowers.txt'时没有缩进它们,那么文件中的每一行都是一个可以独立解析的json对象。