Arhn - архитектура программирования

Результат синтаксического анализа JSON из вирусного API

Сегодня я играл с API-интерфейсом virustotal, пока не получил результат в такой форме:

{ "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
}

Я хотел бы знать, как можно проанализировать этот результат, чтобы заполнить заметку, например:

Memo1.Lines.Add(Format('Antivirus: %0s Result: %1s', [...]));

Ну, я действительно понятия не имею обо всех компонентах JSon, которые могут быть вокруг, может быть, кто-то может направить меня в правильном направлении?

С наилучшими пожеланиями,

Х. Мейзер


  • какую версию делфи вы используете? 02.06.2011
  • Для этого не требуется JSON или что-то еще. Это чрезвычайно простой анализ текста, который можно выполнить с помощью пары вызовов Pos для извлечения соответствующего текста (часть между []), TStringList с использованием CommaText и StrictDelimiters и очень простого цикла для разделения двух половин каждой строки. (имя AV и выход). Почему вы хотите добавить сложность внешней библиотеки для такой простой работы? 02.06.2011
  • Ну, например, хотя результат (Json), который у меня есть, может быть изменен в будущем, поэтому он может быть переменным? По крайней мере, ничего плохого в том, чтобы научиться парсить его с помощью json? 02.06.2011

Ответы:


1

Разобрать строку Json несложно, вы можете использовать модуль DBXJSON, включенный в delphi 2010.

проверьте этот пример кода

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;

В качестве дополнительной рекомендации вы должны прочитать учебник Json, чтобы узнать, как интерпретировать формат Json, и таким образом вы должны быть готовы использовать любую доступную библиотеку.

02.06.2011
  • Я согласен с тем, что вы читаете о json. Я проверил вашу процедуру, но она дает мне нарушение прав доступа? 02.06.2011
  • я проверил код с той же строкой, которую вы публикуете. в какой строке у вас проблемы? 02.06.2011
  • Что ж, нарушение прав доступа возникает непосредственно при вызове ParseString? ParseString(Memo2.Text); бум 02.06.2011
  • Странный тот же результат, когда нарушение прав доступа возникает в этой строке: jValue := TJSONArray(jPair.JsonValue).Get(1); 02.06.2011
  • Я скомпилировал код с помощью Delphi-XE (у меня нет Delphi 2010), единственная идея, которая у меня есть, - это изменение между версиями в модуле DBXJSON, использующем ту же строку, которую вы публикуете? 02.06.2011
  • Кроме того, вы можете проверить эту ссылку theroadtodelphi.wordpress.com/category/json, которая показывает другие способы для анализа ответа json от delphi в примерах статей используется ответ API google trasnlate, но вы можете адаптировать код в соответствии с вашими требованиями. 02.06.2011
  • Вы правы, RRUZ, после проверки вашего исходного кода в XE все работает, как и ожидалось, поэтому в 2010 году что-то должно быть по-другому! 02.06.2011
  • @HMeiser: Да, в dbxjson между D2010 и XE было несколько исправлений. 03.06.2011
  • @HMeiser, парсер JSON, как и в D2010, не соответствует спецификациям JSON. Он нарушает как минимум два пункта: незначительные пробелы, экспоненциальное представление. Не используйте его. 12.08.2011

  • 2

    Я рекомендую библиотеку JSON с открытым исходным кодом SuperObject и онлайн-инспекторы JSON, такие как http://jsonviewer.stack.hu/ или http://json.parser.online.fr/ (этот редактор имеет очень полезную опцию, которая добавляет в представление информацию о типе)

    02.06.2011
  • Оба эти приложения JavaScript совершенно бесполезны. JSON специально разработан, чтобы быть удобным для человека. 12.08.2011
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..