簡體   English   中英

如何讀取包含多條記錄的json文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM