簡體   English   中英

在 JSON 文件中更新相同的 object 而不在其中創建新的 object

[英]Update same object in a JSON file without creating a new object inside it

我有一個空的 json 文件,我正在嘗試根據用戶輸入進行更新。 json 文件中最初沒有內容。

我創建了一個端點,通過 Flask 應用程序以下列格式從用戶那里獲取輸入:

{
    "register_address_lower":40201,
    "register_address_upper":40202,
    "unit":"gal/min"
}

因此,在第一次獲得輸入后,json 文件的內容如下所示:

{"40201": "gal/min", "40202": "gal/min"}

現在,在獲得新的用戶輸入后,我只想在 json 文件中更新相同的 object,而不在其中創建新的 object。 假設新的輸入是:

{
    "register_address_lower":40801,
    "register_address_upper":40803,
    "unit":"gal/min"
}

我的 json 文件中的內容現在應該是:-

{"40201": "gal/min", "40202": "gal/min", "40801": "gal/min", "40802": "gal/min", "40803": "gal/min"}

這是我正在使用的代碼塊:

@app.route("/config",methods=["Post"])
def update_json():
    response = request.json
    with open("config.json", 'r+') as file:
        json_file = json.load(file)
        for res_address in range(response['register_address_lower'],response['register_address_upper']+1):
            new_reg = {str(res_address):response['unit']}
            json_file.update(new_reg)
            #json_file[res_address]=response['unit']
        
        json.dump(json_file, file)

通過上面給出的例子,我得到的結果是: -

{"40201": "gal/min", "40202": "gal/min"}{"40201": "gal/min",
 "40202": "gal/min", "40801": "gal/min", "40802": "gal/min", "40803": "gal/min"}

您正在打開的文件處於“r+”模式,因此您正在從中讀取,但是當您轉儲到它時,您會在已經存在的內容之后開始。 據我了解,文件中的第二個 object 是預期的 output。 您需要with您當前擁有的文件覆蓋外部的文件。

以下是未經測試的重寫:

@app.route("/config",methods=["Post"])
def update_json():
    response = request.json
    with open("config.json", 'r+') as file:
        json_file = json.load(file)
    for res_address in range(response['register_address_lower'],response['register_address_upper']+1):
            new_reg = {str(res_address):response['unit']}
            json_file.update(new_reg)
            #json_file[res_address]=response['unit']
    
     with open("config.json", 'w') as file: 
        json.dump(json_file, file)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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