かなり大きなJSONファイルを解析しようとしていますが、後でRails UIの構文解析を行うことができるハッシュの配列を作成しようとしています。 Rubyの配列にハッシュを一度だけ追加する
は、しかし、私はそれが間違っversion
値を考え出すだかわからないんだけど、私はこれを構築することができました
{
"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" : "<="
} ]
}
} ]
}
} ]
}
},
(のみ関連JSONを追加しようとしています)。
["{\"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つのproduct_name
値があるので、3回同じエントリを作成していますproduct_name
値は、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
私はJSON出力の一部以来のコードを柔軟にしようとしています(含まれていない)on 1つの製品、1つのバージョンなどがあります
また、product_name
を繰り返し処理し、必要な情報をversion
に取得する方法がありますか?
関連するコードの残りを追加できますか? –
@ruby_newbieが残りを追加しました。 – Godzilla74