从Json Dict/Python中删除密钥
我刚开始写这个剧本练习, 它将接受输入,然后将其写入Json文件中。 代码如下所示:从Json Dict/Python中删除密钥,python,json,python-3.x,Python,Json,Python 3.x,我刚开始写这个剧本练习, 它将接受输入,然后将其写入Json文件中。 代码如下所示: import json command = int(input("Do You Want To Add, Or Remove From List? 1/2 ")) if command == 1: add_key = input("Type In key Name: ") add_val1 = input("Type In Value N1:
import json
command = int(input("Do You Want To Add, Or Remove From List? 1/2 "))
if command == 1:
add_key = input("Type In key Name: ")
add_val1 = input("Type In Value N1: ")
add_val2 = input("Type In Value N2: ")
with open('jjj.json', 'r+') as jjson:
tvsh = json.load(jjson)
new_tvsh = {add_key: [add_val1, add_val2]}
tvsh.update(new_tvsh)
jjson.seek(0)
json.dump(tvsh, jjson)
elif command == 2:
with open('jjj.json', 'r+') as jjson:
tvsh = json.load(jjson)
chooseremove = input("Choose Key To Remove: ")
try:
del tvsh[chooseremove]
except KeyError as ex:
print(f"No such key: {chooseremove} ")
jjson.seek(0)
json.dump(tvsh, jjson)
{"Key1":["Val1","Val2"],"Key2":["Val1","Val2"]} "Key3":["Val1","Val2"]}
Json文件如下所示:
{"Key1":["Val1","Val2"],"Key2":["Val1","Val2"],"Key3":["Val1","Val2"]}
但当我尝试删除密钥(例如key3)时,我的json文件将如下所示:
import json
command = int(input("Do You Want To Add, Or Remove From List? 1/2 "))
if command == 1:
add_key = input("Type In key Name: ")
add_val1 = input("Type In Value N1: ")
add_val2 = input("Type In Value N2: ")
with open('jjj.json', 'r+') as jjson:
tvsh = json.load(jjson)
new_tvsh = {add_key: [add_val1, add_val2]}
tvsh.update(new_tvsh)
jjson.seek(0)
json.dump(tvsh, jjson)
elif command == 2:
with open('jjj.json', 'r+') as jjson:
tvsh = json.load(jjson)
chooseremove = input("Choose Key To Remove: ")
try:
del tvsh[chooseremove]
except KeyError as ex:
print(f"No such key: {chooseremove} ")
jjson.seek(0)
json.dump(tvsh, jjson)
{"Key1":["Val1","Val2"],"Key2":["Val1","Val2"]} "Key3":["Val1","Val2"]}
它在dict外取key,但在末尾加“}”
你知道我能做什么吗
编辑:也尝试了.pop,但结果相同这里的错误是运行
jjson.seek(0)
然后运行json.dump(tvsh,jjson)
不会破坏现有文件的内容,它只会覆盖它。由于删除Key3
后写入JSON文件的数据结构较小,因此不会覆盖整个文件(即“Key3”:[“Val1”,“Val2”]}
是第一次写入时留下的)
这里的解决方案是在运行json.dump(tvsh,jjson)
之后运行jjson.truncate()
以下程序显示了差异,但不取决于用户输入:
#!/usr/bin/env python3
import json
# Test data
initial_data = {
"Key1":["Val1", "Val2"],
"Key2":["Val1", "Val2"],
"Key3":["Val1", "Val2"],
}
final_data = {
"Key1":["Val1", "Val2"],
"Key2":["Val1", "Val2"],
}
with open('testA.json', 'w') as f:
json.dump(initial_data, f)
f.seek(0)
json.dump(final_data, f)
with open('testB.json', 'w') as f:
json.dump(initial_data, f)
f.seek(0)
json.dump(final_data, f)
f.truncate()
尝试创建一个,它不接受用户输入,只执行运行时重现问题所需的操作。