【问题标题】:Python remove JSON properties in nested JSON data (or dict)Python 删除嵌套 JSON 数据(或 dict)中的 JSON 属性
【发布时间】:2018-10-19 09:21:33
【问题描述】:

我有一些这样的嵌套 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,我在迭代它时无法从字典中删除:

RuntimeError: 迭代期间字典大小改变

任何人都可以提供一种 Python 方式来浏览 JSON 并删除不需要的属性吗?我找到了解决方案,使用简单的非分层字典,但使用嵌套字典。

【问题讨论】:

    标签: python json dictionary nested del


    【解决方案1】:

    不要迭代一切,直接去,这样就不会出现RuntimeError:

    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"]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 2022-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        相关资源
        最近更新 更多