【问题标题】:Read JSON file in python: ValueError在 python 中读取 JSON 文件:ValueError
【发布时间】:2017-12-24 05:38:03
【问题描述】:

我有一个 .txt 文件,其中包含 70+k json 对象,通过从 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 对象的文件?

【问题讨论】:

  • 你写的不正确,所以你无法正确阅读。

标签: python json twitter tweepy


【解决方案1】:

当然最好从根本上解决问题:编写一个单独的json并读取它,正如COLDSPEED所建议的那样。
但是,如果您已经将多个 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) ) 

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

【讨论】:

  • 谢谢,这非常适合加载已经写入多个 json 对象的数据。
【解决方案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)  

现在,在阅读时,您现有的代码应该可以工作了。你会得到一个字典列表。

【讨论】:

  • 感谢您指出这一点@cᴏʟᴅsᴘᴇᴇᴅ。我已经更新了我的写代码。
  • @T-Jay 如果你使用了我的回答,那么你应该接受我的人;p 开个玩笑。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 2018-10-14
  • 2017-05-29
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多