2016-11-21 59 views
0

我收集了來自Twitter的API一些鳴叫,並儲存起來,MongoDB中,我試圖將數據導出到一個JSON文件,並沒有任何問題存在,直到我試圖做一個python腳本讀取JSON並將其轉換爲csv。我得到這個錯誤回溯我的代碼:Mongoexport出口無效的JSON文件

json.decoder.JSONDecodeError: Extra data: line 367 column 1 (char 9745) 

所以,在互聯網挖後,我指出來檢查在網上驗證,這是我做的實際JSON數據。這給了我的錯誤:

Multiple JSON root elements 

從網站https://jsonformatter.curiousconcept.com/

這裏是開頭的文件/結束第一/第二對象的圖片: enter image description here enter image description here

或鏈接數據here

現在的問題是,我還沒有找到如何處理錯誤在互聯網上的任何東西。我不確定這是否與我收集,導出的數據有關,或者我不知道如何使用它。

我的遊戲結束與這些鳴叫是使網絡圖。我在看Networkx或Gephi,這就是爲什麼我想要一個csv文件。

+0

我很驚訝。你能發佈導出的json文件的開頭和結尾嗎? –

+0

@RobertMoskal我用文件的圖片更新了原始文章。由於數據中縮短的一些鏈接,stackoverflow不會讓我發佈代碼。 –

+0

請在一些文件共享網站上上傳樣本數據並分享鏈接。這裏 – MYGz

回答

1
  1. 羅伯特Moskal是正確的。如果你可以在源代碼中解決這個問題,並且在使用mongoexport時使用--jsonArray標誌,那麼它會讓我的問題更容易。如果你無法在源頭處理它,請閱讀以下幾點。
  2. 下面的代碼將從給定文件中提取出各個json對象,並將它們轉換爲python字典。
  3. 然後,您可以將CSV邏輯應用於每個單獨的字典。
  4. 如果您正在使用CSV模塊,那麼我會說使用unicodecsv模塊,因爲它會處理您JSON對象Unicode數據。

import json 

with open('path_to_your_json_file', 'rb') as infile:  
json_block = []   
for line in infile:    
    json_block.append(line)    
    if line.startswith('}'):     
     json_dict = json.loads(''.join(json_block))       
     json_block = [] 
     print json_dict 

如果你想使用熊貓,你可以使用下面的代碼將其轉換爲CSV:如果你想變平的JSON對象,你可以

import json, pandas as pd 

with open('path_to_your_json_file', 'rb') as infile: 
    json_block = [] 
    dictlist=[] 
    for line in infile: 
     json_block.append(line) 
     if line.startswith('}'): 
      json_dict = json.loads(''.join(json_block)) 
      dictlist.append(json_dict) 
      json_block = [] 

df = pd.DataFrame(jsonlist) 
df.to_csv('out.csv',encoding='utf-8') 

使用pandas.io.json.json_normalize()方法。