PYTHON3 |解析JSON |索引超出范围|可以';t访问数组的第一列
我有这个JSON(我不给你全部的东西,因为它太长了,但你不需要剩下的。) 我要做的是打印此cve的供应商名称。 所以,我所做的是:PYTHON3 |解析JSON |索引超出范围|可以';t访问数组的第一列,json,python-3.x,list,dictionary,indexoutofrangeexception,Json,Python 3.x,List,Dictionary,Indexoutofrangeexception,我有这个JSON(我不给你全部的东西,因为它太长了,但你不需要剩下的。) 我要做的是打印此cve的供应商名称。 所以,我所做的是: with open("nvdcve-1.0-2018.json", "r") as file: data = json.load(file) increment = 0 number_cve = data["CVE_data_numberOfCVEs"] while increment < int(number_cve):
with open("nvdcve-1.0-2018.json", "r") as file:
data = json.load(file)
increment = 0
number_cve = data["CVE_data_numberOfCVEs"]
while increment < int(number_cve):
print (data['CVE_Items'][increment]['cve']['CVE_data_meta']['ID'])
print (',')
print (data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'])
print ("\n")
increment +=
而不是打印(数据['CVE\u Items'][增量]['CVE']['impact']['vendor']['vendor\u data'][0]['vendor\u name'])
而只进行一次迭代是非常令人厌恶的:s,但至少,值是我想要的数据['CVE_Items'][a]['CVE']['impacts']['vendor']['vendor_data'][0]
有人知道吗?确保每个
CVE\u商品
都有vender\u数据
例如:
with open("nvdcve-1.0-2018.json", "r") as file:
data = json.load(file)
increment = 0
number_cve = data["CVE_data_numberOfCVEs"]
while increment < int(number_cve):
print (data['CVE_Items'][increment]['cve']['CVE_data_meta']['ID'])
print (',')
if (len(data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data']) > 0) :
print (data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'])
print ("\n")
increment +=
以open(“nvdcve-1.0-2018.json”,“r”)作为文件:
data=json.load(文件)
增量=0
数字=数据[“cve数据”\u数字]
当增量
多亏了Ron Nabuurs的回答,我发现我所有的供应商数据并不总是有供应商名称。因此,这就是为什么是作品而不是印刷品。
(用于检查对象是否为非null,否则将停止)
所以我所做的是:
try:
print (data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'])
print (',')
except:
pass
您确定每个
CVE\u项目
都有一个供应商数据
?因为如果你对中的值使用,而遇到一个为空的值,它就会忽略它。这就解释了为什么这个解决方案有效哦,我只是看到我有4337个供应商的数据,但只有3107个供应商的名称。它可以解释这件事是的。非常感谢。那么,我是否应该捕获异常并继续使用print方法(而不是for)?我真的不习惯Pyton。我有点怀疑,错误只是因此,您可以继续使用[0]
选择供应商名称。因此,首先检查它是否不是空的,或者数组的长度是否大于0,然后就可以了
with open("nvdcve-1.0-2018.json", "r") as file:
data = json.load(file)
increment = 0
number_cve = data["CVE_data_numberOfCVEs"]
while increment < int(number_cve):
print (data['CVE_Items'][increment]['cve']['CVE_data_meta']['ID'])
print (',')
if (len(data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data']) > 0) :
print (data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'])
print ("\n")
increment +=
try:
print (data['CVE_Items'][increment]['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'])
print (',')
except:
pass