Python删除嵌套JSON数据(或dict)中的JSON属性

Python删除嵌套JSON数据(或dict)中的JSON属性,python,json,dictionary,nested,del,Python,Json,Dictionary,Nested,Del,我有一些嵌套的JSON数据结构,如下所示: my_dict = { "audits": [ { "id": 1, "author_id": 15, "events": [ { "id": 307, "type": "Comment", "body":

我有一些嵌套的JSON数据结构,如下所示:

my_dict = {
    "audits": [
        {
            "id": 1,
            "author_id": 15,
            "events": [
                {
                    "id": 307,
                    "type": "Comment",
                    "body": "*Ticket #25*",
                    "plain_body": "Ticket #25",
                    "public": False,
                    "attachments": [],
                    "audit_id":1
                },
                {
                    "id": 308,
                    "type": "Change",
                    "value": "solved",
                    "field_name": "status",
                    "previous_value": "open"
                }
            ],
            "ticket_id": 25
        }
    ]
}
审核列表可以有许多元素,每个审核可以有许多“事件”。在进一步处理之前,我想从每个“事件”中删除“body”和“plain_body”属性(如果存在)。 我试图在上面循环,如果我找到了钥匙,就删除:

for k1 in my_dict.keys():
    i = 0
    for l2 in my_dict[k1]:
        for l3 in l2.keys():
            if l3 == 'events':
                j = 0
                for l4 in my_dict[k1][i][l3]:
                    for l5 in l4.keys():
                        if l5 in ('body', 'plain_body'):
                            print("Found key to delete: '{0}'".format(l5))
                            print(my_dict[k1][i][l3][j][l5])
                            # del my_dict[k1][i][l3][j][l5]
        i += 1
除了这种挖掘数据结构的方法似乎根本不是pythonic之外,我不能在迭代dict时将其删除:

RuntimeError:字典在迭代期间更改了大小


有人能提供一种pythonic方式来浏览JSON并删除不需要的属性吗?我已经用简单的非分层dict找到了解决方案,但是用嵌套dict解决了这个问题。

直接执行,而不是迭代所有内容,这样就不会出现运行时错误:

for audit in my_dict["audits"]:
    for event in audit["events"]:
        if "plain_body" in event:
            del event["plain_body"]
        if "body" in event:
            del event["body"]

直接执行,而不是迭代所有内容,这样您就不会出现运行时错误:

for audit in my_dict["audits"]:
    for event in audit["events"]:
        if "plain_body" in event:
            del event["plain_body"]
        if "body" in event:
            del event["body"]

为什么不创建一个新的dict并为它分配所需的键和值呢?
您可以使用if判断来验证您需要的字段

为什么不创建一个新的dict并为其分配所需的键和值? 您可以使用if判断来验证您需要的字段