Давно хотел поиграть с библиотекой superobject для парсинга json. И вот представился случай.
Скачиваем с помощью SVN http://superobject.googlecode.com/svn/trunk/
В содержимом архива нам интересны следующие файлы:
Сама библиотека - superobject.pas
Коротенький, но содержательный файл справки - readme.html
При запуске под DELPHI XE3, ругнулся, не найдя определение константы разделителя дробной и целой части числа. После добавления константы вручную в superobject.pas заработало все нормально. В новых версиях ошибку возможно исправят.
Тут сделаю небольшое отступление добавив краткую справку по JSON.
В простейшем виде JSON представляет собою текстовый файл следующего содержания:
Элементы списка оформлены синтаксисом: "имя параметра" : "значение". Типы значений могут быть следующие:
- число,
- строка "значение заключено в кавычки",
- массив ["квадратные", "скобки"],
- новый узел {может содержать любые вышеописаные элементы}
Для удобного просмотра и редактировая рекмендую удобный онлайн парсер http://json.parser.online.fr/
Ну вот собственно и все необходимое для обработки документов любой сложности.
Скачиваем с помощью 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;