Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Json Dict/Python中删除密钥_Python_Json_Python 3.x - Fatal编程技术网

从Json Dict/Python中删除密钥

从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:

我刚开始写这个剧本练习, 它将接受输入,然后将其写入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"]}
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()
尝试创建一个,它不接受用户输入,只执行运行时重现问题所需的操作。