如何使用Python删除JSON文件中的指定条目
移除JSON集合中指定元素的实现方法
问题背景
我有以下以Python变量形式存储的JSON数据:
json_data = [ { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9099", "aks9098", "aks9100", "aks9101", "aks9102", "aks9103" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chinq.n@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9099", "aks9098", "aks9100", "aks9101", "aks9102", "aks9103" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chinw.d@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9099", "aks9098", "aks9100", "aks9101", "aks9102", "aks9103" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chins.b@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9099", "aks9098", "aks9100", "aks9101", "aks9102", "aks9103" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chini.a@example.com" } ]
需求是从每个用户条目下permissions中的collections列表里移除aks9098、aks9099和aks9103,最终得到如下结果:
[ { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9100", "aks9101", "aks9102" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chinq.n@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9100", "aks9101", "aks9102" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chinw.d@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9100", "aks9101", "aks9102" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chins.b@example.com" }, { "authType": "ldap", "password": "", "permissions": [ { "collections": [ "aks9100", "aks9101", "aks9102" ], "project": "Central Project" } ], "role": "devSecOps", "username": "chini.a@example.com" } ]
解决代码
可以通过Python的列表推导式遍历过滤元素,实现需求:
# 定义需要移除的元素集合(用集合提升查找效率) remove_collections = {"aks9098", "aks9099", "aks9103"} # 遍历每个用户条目 for user_entry in json_data: # 遍历用户的权限配置 for permission in user_entry["permissions"]: # 过滤保留需要的集合元素 permission["collections"] = [ col for col in permission["collections"] if col not in remove_collections ]
运行这段代码后,json_data就会变成期望的格式。如果需要将结果保存为JSON文件,可以添加以下代码:
import json with open("processed_users.json", "w") as f: json.dump(json_data, f, indent=4)
内容的提问来源于stack exchange,提问作者chin wooi Ng
相关产品推荐
相关产品推荐

