2016-08-12 32 views
1

我已經從數據流中構建了一個json對象,其中每個用戶都有一個json對象。Python:將多個json對象寫入文件;稍後通過json.load打開並加載

{ 
    "entities": { 
     "description": { 
      "urls": [] 
     } 
    }, 
    "utc_offset": -10800, 
    "id" 
    "name": "Tom", 
    "hit_count": 7931, 
    "private": false, 
    "active_last_month": false, 
    "location": "", 
    "contacted": false, 
    "lang": "en", 
} 

目的:我想構建一個JSON文件,其中每個JSON對象成爲與縮進一個文件中的行。而當談到讀回JSON文件,它可以打開使用閱讀:

例如:

with open(pathToFile) as json_file: 
    json_data = json.load(json_file) 
    for key in json_data: 
     print key["id"] 

但在:以下文件

[ 
{ 
    "entities": { 
     "description": { 
      "urls": [] 
     } 
    }, 
    "utc_offset": -10800, 
    "id" 
    "name": "Tom", 
    "hit_count": 7931, 
    "private": false, 
    "active_last_month": false, 
    "location": "", 
    "contacted": false, 
    "lang": "en", 
} 
, 
{ 
    "entities": { 
     "description": { 
      "urls": [] 
     } 
    }, 
    "utc_offset": -10500, 
    "id" 
    "name": "Mary", 
    "hit_count": 554, 
    "private": false, 
    "active_last_month": false, 
    "location": "", 
    "contacted": false, 
    "lang": "en", 
} 
] 

上面的文件可以輕鬆地閱讀這裏的一刻是我如何寫構建JSON文件:

with open(root + filename + '.txt', 'w+') as json_file: 
     # convert from Python dict-like structure to JSON format 
     jsoned_data = json.dumps(data) 
     json_file.write(jsoned_data) 
     json_file.write('\n') 

這給我

{ 
    indented json data 
} 
{ 
    indented json data 
} 

PS:通知括號[]不存在與,

沿着當您嘗試讀取相同的代碼結構

with open(pathToFile) as json_file: 
    json_data = json.load(json_file) 
    for key in json_data: 
     print key["id"] 

你最終得到的錯誤: ValueError: Extra data: line 101 column 1 - line 1889 column 1

+1

不可能。您不能盲目追加到JSON文件而不打破它。 JSON是一個序列化的數據結構,它不是純文本。如果你想修改它,你將不得不讀取文件/解析/修改/序列化/寫入文件,其他的一切將是一個醜陋的破解,在某些時候肯定會破壞。您可能需要查看面向文檔的數據庫(類似CouchDB)以進行此類CRUD工作。 – Tomalak

+0

帶括號和','的例子是從網上下載的文件。我知道我在問你猜。你認爲它來自CouchDB還是MongoDB轉儲? –

+0

它來自哪裏並不重要。 JSON文件是原子的,你只能將它們作爲一個整體處理,或者根本不處理。如果你想分別處理它們中的各個位,請使用已完成此任務的工具。或者使用許多小文件。 – Tomalak

回答

-1

我想你應該將新的JSON數據添加到包含以前數據的列表中:

newData = {"entities": { 
    "description": { 
     "urls": [] 
    } 
}, 
"utc_offset": -10500, 
"id": 3, 
"name": "Mary", 
"hit_count": 554, 
"private": False, 
"active_last_month": False, 
"location": "", 
"contacted": False, 
"lang": "en" 
} 

def readFile(): 
    with open('testJson', 'r') as json_file: 
     json_data = json.load(json_file) 
     for key in json_data: 
      print key["id"] 

def writeFile(): 
    with open('testJson', 'r') as json_file: 
     oldData = json.load(json_file) 
    with open('testJson', 'w+') as json_file: 
     # convert from Python dict-like structure to JSON format 
     data = oldData.append(newData) 
     jsoned_data = json.dumps(oldData, indent=True) 
     json_file.write(jsoned_data) 

if __name__ == '__main__': 
    readFile() 
    writeFile() 
    readFile() 
相關問題