Python 删除嵌套 JSON 数据(或字典)中的 JSON 属性
Python remove JSON properties in nested JSON data (or dict)
我有一些嵌套的 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
}
]
}
审计列表可以有很多元素,每个审计可以有很多 "events"。在进一步处理之前,我想从每个 "event" 中删除 "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: dictionary changed size during iteration
任何人都可以提供一种 pythonic 方式来浏览 JSON 并删除不需要的属性吗?我已经通过简单的非分层指令找到了解决方案,但使用了嵌套指令。
与其遍历所有内容,不如直接执行,这样你就不会出现 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"]
为什么不创建一个新的字典并为其分配所需的键和值?
您可以使用if判断来验证您需要的字段!
我有一些嵌套的 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
}
]
}
审计列表可以有很多元素,每个审计可以有很多 "events"。在进一步处理之前,我想从每个 "event" 中删除 "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: dictionary changed size during iteration
任何人都可以提供一种 pythonic 方式来浏览 JSON 并删除不需要的属性吗?我已经通过简单的非分层指令找到了解决方案,但使用了嵌套指令。
与其遍历所有内容,不如直接执行,这样你就不会出现 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"]
为什么不创建一个新的字典并为其分配所需的键和值? 您可以使用if判断来验证您需要的字段!