问题
I was playing around with the virustotal api today while becoming back the result in this form:
{ "permalink" : "http://www.virustotal.com/file-scan/report.html?id=7b6b268cbca9d421aabba5f08533d3dcaba50e0f7887b07ef2bd66bf218b35ff-1304089592",
"report" : [ "2011-04-29 15:06:32",
{ "AVG" : "Exploit_c.TVH",
"AhnLab-V3" : "PDF/Exploit",
"AntiVir" : "EXP/Pidief.UK",
"Antiy-AVL" : "Trojan/win32.agent",
"Avast" : "JS:Pdfka-gen",
"Avast5" : "JS:Pdfka-gen",
"BitDefender" : "Exploit.PDF-JS.Gen",
"CAT-QuickHeal" : "",
"ClamAV" : "",
"Comodo" : "Exploit.JS.Pidief.~AWQ",
"DrWeb" : "",
"Emsisoft" : "Exploit.JS.Pdfka!IK",
"F-Prot" : "",
"F-Secure" : "Exploit:W32/Pidief.DEE",
"Fortinet" : "",
"GData" : "",
"Ikarus" : "Exploit.JS.Pdfka",
"Jiangmin" : "",
"K7AntiVirus" : "",
"Kaspersky" : "Exploit.JS.Pdfka.dnc",
"McAfee" : "",
"McAfee-GW-Edition" : "",
"Microsoft" : "Exploit:Win32/Pdfjsc.NJ",
"NOD32" : "PDF/Exploit.Pidief.PGD",
"Norman" : "",
"PCTools" : "Trojan.Pidief",
"Panda" : "",
"Prevx" : "",
"Rising" : "",
"SUPERAntiSpyware" : "",
"Sophos" : "Troj/PDFJs-RD",
"Symantec" : "Trojan.Pidief",
"TheHacker" : "",
"TrendMicro" : "TROJ_PIDIEF.VTG",
"TrendMicro-HouseCall" : "TROJ_PIDIEF.VTG",
"VBA32" : "",
"VIPRE" : "Exploit.PDF-JS.Gen (v)",
"ViRobot" : "PDF.S.Exploit.74634",
"VirusBuster" : "",
"eSafe" : "",
"eTrust-Vet" : ""
}
],
"result" : 1
}
I would like to know how one can parse this result to fill a memo like:
Memo1.Lines.Add(Format('Antivirus: %0s Result: %1s', [...]));
Well, I really have no clue about all the JSon components which might be around to maybe someone can direct me to the right direction here?
Kindest regards,
H.Meiser
回答1:
Parsing Json string is not difficult, you can use the DBXJSON unit included since delphi 2010.
check this sample code
Uses
DBXJSON;
procedure TForm1.ParseString(const AString: string);
var
json : TJSONObject;
jPair : TJSONPair;
jValue : TJSONValue;
jcValue : TJSONValue;
l,i : Integer;
begin
json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(AString),0) as TJSONObject;
try
//get the pair to evaluate in this case the index is 1
jPair := json.Get(1);
//cast the JsonValue to TJSONArray to access the elements of the array
jValue := TJSONArray(jPair.JsonValue).Get(1);
l:=TJSONArray(jValue).Size;
for i:=0 to l-1 do
begin
//get the i element of the array
jcValue := TJSONArray(jValue).Get(i);
//get the pair pointing to the i element
jPair := TJSONPair(jcValue);
//show the result
Memo1.Lines.Add(Format('Antivirus %s Result %s',[jPair.JsonString.Value,jPair.JsonValue.Value]));
end;
finally
json.Free;
end;
end;
As additional recommendation you must read a Json tutorial to learn how interpret the Json format and in this way you must be preparated to use any library available.
回答2:
I recommend the open source JSON library SuperObject and online JSON inspectors like http://jsonviewer.stack.hu/ or http://json.parser.online.fr/ (this editor has a very useful option which adds type information to the view)
来源:https://stackoverflow.com/questions/6217595/json-parse-result-from-virustotal-api