用Python更新JSON中的一个键的值

1 人关注

我试图只改变一个键的值,但结果是我的整个json数据被附加到了旧的数据。

Here is the script

import json
with open('test.json', "r+") as json_file:
        wifi = json.load(json_file)
        status = wifi["wifi_status"]
        wifi["wifi_status"] = "off"
        json.dump(wifi, json_file)

这是json文件

{"wifi_status":"on","ssid":"my_router","pw":"my_password"}
{"wifi_status":"on","ssid":"my_router","pw":"my_password"}{"wifi_status": "off", "ssid": "my_router", "pw": "my_password"}

有没有一种方法可以在不倾倒所有信息的情况下修改一个值?

2 个评论
你是以 "r+" 模式打开文件的,这意味着你从文件中读取,然后在结束后写入。我会以 "rt" 模式打开,进行阅读,然后再以 "wt" 模式打开,进行写入。
现在它像我预期的那样工作。谢谢你。
python
json
python-3.x
Reactionic
Reactionic
发布于 2020-06-24
4 个回答
Jab
Jab
发布于 2020-06-24
已采纳
0 人赞同

You open the file in r+ You must open in w to overwrite the file

import json
with open('test.json', "r+") as json_file:
    wifi = json.load(json_file)
    status = wifi["wifi_status"]
    wifi["wifi_status"] = "off"
with open('test.json', "w") as json_file:
    json.dump(wifi, json_file)
    
czarss
czarss
发布于 2020-06-24
0 人赞同

这里的问题是,你已经打开了一个文件并读取了它的内容,所以光标在文件的末端。通过向同一个文件句柄写入,你基本上是在向文件追加内容。

import json
with open("x.json", "r+") as jsonFile:
    wifi = json.load(jsonFile)
wifi["wifi_status"] = "off"
with open("x.json", "w") as jsonFile:
    json.dump(wifi, jsonFile)

或者,你可以使用 seek() 将光标移回文件的开头,然后开始写,接着用 truncate() 来处理新数据小于前数据的情况。

Victor Corte
Victor Corte
发布于 2020-06-24
0 人赞同

json.dumps是追加到文件指针的光标末端。

你可以用w+重新打开文件来清除文件中的所有内容,或者你可以把json_file.seek(0)放在json.dumps之前,把光标带回起点。

NAGA RAJ S
NAGA RAJ S
发布于 2020-06-24
0 人赞同

你可以试试这个

import json
jsonFile = open("test.json", mode="r")
jdata = json.load(jsonFile)
jdata["wifi_status"] = "off"