[英]How to read a json file with more than one records
我正在嘗試保存游戲的高分並將其加載到高分部分,但我保存的方式向 JSON 文件添加了多個記錄。 問題是在加載時,我收到錯誤json.decoder.JSONDecodeError: Extra data
only 當有多個記錄時。
我很確定這是我的問題,但我作為首發我無法理解。
我在節省什么
score = {
"score" : round_counter,
"name" : player["name"],
"hp left" : player["hitpoints"]
}
我是如何保存它的
if os.path.isfile('score.json'):
print("your score has been added")
json_dump = json.dumps(score)
f = open("score.json","a")
f.write(json_dump)
f.close()
else :
print ("database doesn't exist so it was created!")
json_dump = json.dumps(score)
f = open("score.json","x")
f.write(json_dump)
f.close()
我是怎么讀的
with open ("score.json") as json_data:
data = json.load(json_data)
print(data)
它適用於第一次運行,但是當 .json 文件中有 2 條記錄時,我無法讀取它。 我不知道我是否需要更完整的閱讀代碼,或者我在 .json 中保存多個字典的方式是根本錯誤的。
為了存儲多個 JSON 記錄,請使用數組,因為在加載時您可以只加載 JSON 類型(數組是您正在尋找的用於該用例的理想 JSON 類型)。
在這種情況下,要讀取所有分數:
scores = []
with open ("score.json") as json_data:
scores = json.load(json_data)
但最重要的是,將它們寫入文件:
scores.append(score)
json_dump = json.dumps(scores)
f = open("score.json","w")
f.write(json_dump)
f.close()
更新最后的代碼也可以使用json.dump
編寫:
scores.append(score)
f = open("score.json","w")
json.dump(scores, f)
f.write(json_dump)
f.close()
您的代碼的編寫方式將附加分數字典,而不是在分數數組中添加對象。
如果你檢查輸出文件 score.json 它看起來像 {...}{...}{...} 而它應該像 [{...},{...},{... }]
您可以逐行讀取文件,每一行都將包含一個有效的 JSON 對象:
with open('score.json') as fp:
for line in fp:
data = json.loads(line)
# do something with data
或者,如果您需要一個對象中的所有內容:
with open('score.json') as fp:
data = []
for line in fp:
data.append(json.loads(line))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.