从JSON文件中删除子元素

2024-10-02 22:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为从JSON嵌套的dict中删除一个键很简单,但最终还是出现了错误。 我有如下所示的JSON文件,并希望从其元素"Codes"中删除一个键"8888"

dummy.json:

{
    "Codes": {
        "8888": "code1|18888",
        "9999": "code2|19999",
        "7777": "code3|17777"
    },
    "Names": {
        "Site1": "Site1|18888",
        "Site2": "Site2|19999",
        "Site3": "Site3|17777"
    }
}

Python代码:

import json

with open('dummy.json') as json_data:
    data = json.load(json_data)
    for element in data["Codes"]:
        #del element['8888']
        element.pop('8888', None)

with open('dummy.json'), 'w') as outfile:  
    json.dump(data, outfile)

结果:

在第一次尝试中,我尝试了del element['8888'],它抛出TypeError: 'str' object does not support item deletion

根据发现的here示例,我尝试了element.pop('8888', None),它抛出了AttributeError: 'str' object has no attribute 'pop'错误

我不确定我犯了什么错误,请帮忙


Tags: jsondataas错误withelementopenpop
3条回答

试试这个:

with open('test.json') as fp:
    data = json.loads(fp.read())
    del data['Codes']['8888']

for element in data["Codes"]循环中,元素将是data["Codes"]字典的键。所以,如果打印data["Codes"]的所有元素,结果如下

for element in data["Codes"]:
    print(element)
>>> 8888
>>> 9999
>>> 7777

你不需要循环。如果您想删除(或弹出)某些data["Codes"]键,只需这样做

data["Codes"].pop("8888", None)

data["Codes"]上迭代时,element将是data["Codes"]字典的键,它是一个字符串,没有pop函数(只能应用于dict)

请尝试:

import json
with open('dummy.json') as json_data:
    data = json.load(json_data)
    data["Codes"].pop("8888")

with open('dummy.json', 'w') as outfile:  
    json.dump(data, outfile)

相关问题 更多 >