2017-07-19 119 views
1

我有通過從Twitter拉出數據,並使用卸入文件而獲得70 + K JSON對象.txt文件:讀JSON文件:ValueError異常

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對象的文件?

+0

您沒有正確書寫,因此無法正確閱讀。 –

回答

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對象。

+1

謝謝,這可以完美地加載已經寫入多個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) 

現在,閱讀時,你現有的代碼應工作。你會得到一個字典列表。

+0

感謝您指出@cᴏʟᴅsᴘᴇᴇᴅ。我已經更新了我的寫代碼。 –

+0

@ T-Jay如果你用我的答案,那麼你應該接受我的男人; p只是開玩笑。 –