понедельник, 27 мая 2013 г.

Парсинг JSON с использованием библиотеки Superobject.

Давно хотел поиграть с библиотекой superobject для парсинга json. И вот представился случай.

Скачиваем с помощью SVN http://superobject.googlecode.com/svn/trunk/

В содержимом архива нам интересны следующие файлы:
      Сама библиотека - superobject.pas
      Коротенький, но содержательный файл справки - readme.html

При запуске под DELPHI XE3, ругнулся, не найдя определение константы разделителя дробной и целой части числа. После добавления константы вручную в superobject.pas заработало все нормально. В новых версиях ошибку возможно исправят.

Тут сделаю небольшое отступление добавив краткую справку по JSON.
В простейшем виде JSON представляет собою текстовый файл следующего содержания:

{
  "Name":"Joh",
  "Age":25,
  "Hobby":["sport", "moto"],
  "Family" :
     {
        "Mama": "Anna",
        "Father": "Bred",
        "Brother": "Maxim"
     }
}


Элементы списка оформлены синтаксисом: "имя параметра" : "значение". Типы значений могут быть следующие:
- число,
- строка "значение заключено в кавычки",
- массив ["квадратные", "скобки"],
- новый узел {может содержать любые вышеописаные элементы}

Для удобного просмотра и редактировая рекмендую удобный онлайн парсер http://json.parser.online.fr/


//Теперь парсинг, все очень просто:
uses superobject;


...  
procedure Parsing
  var
    JsObject1, JsObject2: ISuperObject; // явлется интерфейсом, 

                                        // поэтому не нужно объект
                                        // создавать и очищать память
    JsonArray: TSuperArray;
    s: string;
    i: integer;
    h: string;
  begin
   JsObject1 := SO(s);                   // строка с вышеприведенным текстом
   S :=  JsObject1.s["Name"];            // получаем строку
   I :=  JsObject1.i["Age"];             // получаем число
   JsonArray := JsObject1.A["Hobby"];    // получаем массив

   JsObject2 := JsObject1.O["Family"];   // получаем вложенный объект
   h := JsonArray.s[0];                  // получаем элемент массива
  end;

Ну вот собственно и все необходимое для обработки документов любой сложности.



Комментариев нет:

Отправить комментарий