Python 从 JSON 中提取特定的键和值不起作用



我正在尝试使用Python从Windows中的json中提取特定的键和值。

我想使用 dumps 命令,但找不到一个好的例子。

**更新的数据:json 文件的摘录是(但文件很长(:

{
"CVE_data_type" : "CVE",
"CVE_data_format" : "MITRE",
"CVE_data_version" : "4.0",
"CVE_data_numberOfCVEs" : "64",
"CVE_data_timestamp" : "2020-01-09T08:00Z",
"CVE_Items" : [ {
"cve" : {
"data_type" : "CVE",
"data_format" : "MITRE",
"data_version" : "4.0",
"CVE_data_meta" : {
"ID" : "CVE-2020-0001",
"ASSIGNER" : "cve@mitre.org"
},
"problemtype" : {
"problemtype_data" : [ {
"description" : [ ]
} ]
},
"references" : {
"reference_data" : [ {
"url" : "https://source.android.com/security/bulletin/2020-01-01",
"name" : "https://source.android.com/security/bulletin/2020-01-01",
"refsource" : "CONFIRM",
"tags" : [ ]
} ]
},
"description" : {
"description_data" : [ {
"lang" : "en",
"value" : "In getProcessRecordLocked of ActivityManagerService.java isolated apps are not handled correctly. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is not needed for exploitation. Product: Android Versions: Android-8.0, Android-8.1, Android-9, and Android-10 Android ID: A-140055304"
} ]
}
},
"configurations" : {
"CVE_data_version" : "4.0",
"nodes" : [ ]
},
"impact" : { },
"publishedDate" : "2020-01-08T19:15Z",
"lastModifiedDate" : "2020-01-08T20:01Z"
}, {
"cve" : {
"data_type" : "CVE",
"data_format" : "MITRE",
"data_version" : "4.0",
"CVE_data_meta" : {
"ID" : "CVE-2020-0002",
"ASSIGNER" : "cve@mitre.org"
},
"problemtype" : {
"problemtype_data" : [ {
"description" : [ ]
} ]
},
"references" : {
"reference_data" : [ {
"url" : "https://source.android.com/security/bulletin/2020-01-04",
"name" : "https://source.android.com/security/bulletin/2020-01-04",
"refsource" : "CONFIRM",
"tags" : [ ]
} ]
},
"description" : {
"description_data" : [ {
"lang" : "en",
"value" : "In ih264d_init_decoder of ih264d_api.c, there is a possible out of bounds write due to a use after free. This could lead to remote code execution with no additional execution privileges needed. User interaction is needed for exploitation Product: Android Versions: Android-8.0, Android-8.1, Android-9, and Android-10 Android ID: A-142602711"
} ]
}
},
"configurations" : {
"CVE_data_version" : "4.0",
"nodes" : [ ]
},
...

我需要提取 ID 和描述。

我试过这个

for key, value in json.dumps(cve_dict['CVE_Items'][0], sort_keys=True, indent=4, separators=',', ': ')):
#if(key in ['ID', 'description']):
print(key, value)

但是我收到此错误:

File "unzip_get_info.py", line 19
for key, value in json.dumps(cve_dict['CVE_Items'][0], sort_keys=True, indent=4, separators=',', ': ')):
                                    ^
SyntaxError: invalid syntax

我可以用这个打印出整个 json:

print(json.dumps(cve_dict['CVE_Items'][0], sort_keys=True, indent = 4, separators=(',', ': ')))

我不是一个伟大的python程序员。 知道我如何获取ID和描述的键/值吗? 我尝试直接用cve_dict做到这一点,但错误是关于我不能直接做到这一点。

我将不胜感激你的帮助。 这是我的第一个python程序。

我试图弄清楚如何使用此链接的转储来做到这一点,但我没有看到它。 我也看过这个,但我不确定。

**更新:我试过了

for key, value in cve_dict['CVE_Items'][0].items():
if(key in ['ID', 'description']):
print(key, value)

除了下面建议的内容外,还试图将其限制为 ID 和描述,但它没有打印任何内容。 我知道 ID 和描述在那里(见上面的 json(。 如何只打印 ID 和描述,而不是所有键/值?

当字典本身可以轻松遍历时,不应将字典转换为 JSON 字符串。只需通过以下方式访问所需的ID键值:

cve_dict['CVE_Items'][0]['cve']['CVE_data_meta']['ID']

如果需要所有 ID,可以使用for循环循环访问列表项:

for item in cve_dict['CVE_Items']:
print(item['cve']['CVE_data_meta']['ID'])

你能尝试迭代字典吗:

for k, v in cve_dict['CVE_Items'][0].items():
print(k, v)

json.dumps是将dict转换回字符串,而不是python对象进行迭代,

最新更新