我正试图解析一个相当大的JSON文件,现在正试图创建一个哈希数组,我可以稍后让我的Rails UI解析。
(尝试只添加相关的JSON)
{
"CVE_data_type" : "CVE",
"CVE_data_format" : "MITRE",
"CVE_data_version" : "4.0",
"CVE_data_numberOfCVEs" : "2203",
"CVE_data_timestamp" : "2017-09-08T16:01Z",
"CVE_Items" : [ {
"cve" : {
"CVE_data_meta" : {
"ID" : "CVE-2006-0441"
},
"affects" : {
"vendor" : {
"vendor_data" : [ {
"vendor_name" : "automatedlogic",
"product" : {
"product_data" : [ {
"product_name" : "webctrl",
"version" : {
"version_data" : [ {
"version_value" : "5.5",
"version_affected" : "<="
}, {
"version_value" : "5.2",
"version_affected" : "<="
}, {
"version_value" : "6.1",
"version_affected" : "<="
}, {
"version_value" : "6.5",
"version_affected" : "<="
}, {
"version_value" : "6.0",
"version_affected" : "<="
} ]
}
}, {
"product_name" : "i-vu",
"version" : {
"version_data" : [ {
"version_value" : "5.2",
"version_affected" : "<="
}, {
"version_value" : "5.5",
"version_affected" : "<="
}, {
"version_value" : "6.0",
"version_affected" : "<="
}, {
"version_value" : "6.5",
"version_affected" : "<="
} ]
}
}, {
"product_name" : "sitescan_web",
"version" : {
"version_data" : [ {
"version_value" : "5.5",
"version_affected" : "<="
}, {
"version_value" : "6.5",
"version_affected" : "<="
}, {
"version_value" : "5.2",
"version_affected" : "<="
}, {
"version_value" : "6.1",
"version_affected" : "<="
} ]
}
} ]
}
} ]
}
},
我已经能够构建这个,但是我不确定它是如何产生错误的
version
价值观另外,它会创建相同的条目3次(我假设是因为有3次
product_name
价值观:
["{\"product_name\"=>\"webctrl\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"i-vu\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"sitescan_web\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.0,\"]}"]
["{\"product_name\"=>\"webctrl\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.5,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"i-vu\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.5,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"sitescan_web\", \"versions\"=>[\"<= 5.5,\", \"<= 5.2,\", \"<= 6.1,\", \"<= 6.5,\", \"<= 6.0,\"]}"]
["{\"product_name\"=>\"webctrl\", \"versions\"=>[\"<= 5.5,\", \"<= 6.1,\", \"<= 5.2,\", \"<= 6.5,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"i-vu\", \"versions\"=>[\"<= 5.5,\", \"<= 6.1,\", \"<= 5.2,\", \"<= 6.5,\", \"<= 6.0,\"]}", "{\"product_name\"=>\"sitescan_web\", \"versions\"=>[\"<= 5.5,\", \"<= 6.1,\", \"<= 5.2,\", \"<= 6.5,\", \"<= 6.0,\"]}"]
您会注意到,这些值在原始JSON和输出之间没有关联,而且无论
产品名称
数组中每个哈希中返回的3个乘积的值始终相同。
data['CVE_Items'].each do |d|
# setups up needed arrays
reference_data = []
product_names = []
product_info = Hash.new
# identifying CVE code (use this for lookup with exploit db?)
cve_id = d['cve']['CVE_data_meta']['ID']
# vendor name of the product, defaults to 'Unknown' if not found
vendor_name = d['cve']['affects']['vendor']['vendor_data'][0]['vendor_name'] rescue "Unknown"
begin
product_name = d['cve']['affects']['vendor']['vendor_data'][0]['product']['product_data'].each do |n|
product_info = Hash.new
product_info['product_name'] = n['product_name'] rescue "Unknown"
versions_affected = []
versions = d['cve']['affects']['vendor']['vendor_data'][0]['product']['product_data'][0]['version']['version_data'].each do |v|
versions_affected << "#{v['version_affected']} #{v['version_value']},"
end
product_info['versions'] = versions_affected
product_affected << "#{product_info}"
end
rescue
"Unknown"
end
end
puts product_affected
产品名称
并获得平行结果
版本
我需要的信息?