如何从指定JSON数据中提取所有severity为critical或high的vulnerabilities条目
如何从指定JSON数据中提取所有severity为critical或high的vulnerabilities条目
嘿,我来帮你搞定这个问题!你现在已经成功加载了JSON文件,接下来只需要针对嵌套的结构做一层筛选就行。咱们一步一步来:
首先,你的JSON结构是多层嵌套的:results 是一个数组,里面的每个元素都包含 vulnerabilities 数组,而我们要找的就是这个数组里严重程度符合要求的条目。
我给你调整一下代码,不仅能实现筛选,还能避免一些潜在的报错(比如某个条目里没有vulnerabilities字段,或者某个漏洞没有severity字段的情况):
import json # 用with语句自动管理文件,比手动close更安全,还能避免异常时文件没关闭 with open('file.json', 'r') as f: json_object = json.load(f) # 定义我们要筛选的严重程度,用集合查找更快 target_severities = {'critical', 'high'} # 遍历results里的每个条目 for result in json_object['results']: # 先检查当前result有没有vulnerabilities字段,防止KeyError if 'vulnerabilities' in result: # 遍历每个漏洞条目 for vuln in result['vulnerabilities']: # 确认漏洞有severity字段,再判断是否符合我们的目标 # 转成小写是为了兼容可能的大小写不一致,比如"Critical"或者"HIGH" if 'severity' in vuln and vuln['severity'].lower() in target_severities: print(vuln)
如果你不想直接打印,而是想把筛选后的结果存起来后续处理,也可以改成这样:
import json with open('file.json', 'r') as f: json_object = json.load(f) target_severities = {'critical', 'high'} filtered_vulnerabilities = [] for result in json_object['results']: if 'vulnerabilities' in result: for vuln in result['vulnerabilities']: if 'severity' in vuln and vuln['severity'].lower() in target_severities: filtered_vulnerabilities.append(vuln) # 现在filtered_vulnerabilities里就是所有符合条件的漏洞了 print("筛选后的漏洞列表:") for vuln in filtered_vulnerabilities: print(vuln)
这样做的好处:
- 用
with语句处理文件,不用手动调用f.close(),代码更简洁安全 - 增加了字段存在性检查,避免程序因为JSON结构不完整而崩溃
- 把严重程度转成小写再判断,能兼容JSON里可能出现的大小写混合情况(比如"Critical")
内容来源于stack exchange
相关产品推荐
相关产品推荐

