我最好的猜測是對自己沒有行是有效的JSON。這將導致每次拋出ValueError
,並且您將永遠不會到達data.append(...)
,因爲當時一直拋出異常。
如果整個文件是一個JSON數組是這樣的:
[
{
"direction": "left",
"time": 1
},
{
"direction": "right",
"time": 2
}
]
然後,你可以簡單地使用類似:
with open('output.json', 'r') as f:
data = json.load(f)
然而,如果它在的JSON物品一堆頂層,沒有被封閉在一個JSON對象或數組中,像這樣:
{
"direction": "left",
"time": 1
}
{
"direction": "right",
"time": 2
}
那麼你將不得不去與一個不同的方法:逐項解碼項目。不幸的是,我們不能流中的數據,所以我們首先必須加載在一旦所有的數據:
with open('output.json', 'r') as f:
json_data = f.read()
要分析一個項目,我們使用decode_raw
。這意味着我們需要一個JSONDecoder
:
decoder = json.JSONDecoder()
然後我們就一起去,剝離在串左側的任何空白,檢查,以確保我們仍然有項目,並分析項目:
while json_data.strip(): # while there's still non-whitespace...
# strip off whitespace on the left side of the string
json_data = json_data.lstrip()
# and parse an item, setting the new data to be whatever's left
item, json_data = decoder.parse_raw(json_data)
# ...and then append that item to our list
data.append(item)
如果你正在做大量的數據採集這樣的,它可能是值得將其存儲在數據庫中。像SQLite這樣簡單的事情可以做得很好。一個數據庫可以更容易地以有效的方式進行彙總統計。 (這就是它們的設計目的!)如果你經常使用這些數據,它可能會讓訪問數據的速度更快,而不是解析JSON。
@MattBall它與文件的大小無關。 – JBernardo
你們可以幫忙嗎? – metersk
@Jernernardo確實,雖然標題暗示大小是問題。 –