Привет Всем!
Решил поделится впечатлениями по работе с SuperObject'ом и родным JSON'ом
тест был файла с 2000+ объектами в JSON файле
структура файла была такая
{
"status":"OK",
"last_id":"711",
"objects":[
{
"obj_id":"1",
"obj_acc_id":"1",
"obj_cat_id":"24",
"obj_title":"13 магистраль",
"obj_descr":"ЖК представляет собой комфортный дом, состоящий из 14 блок-секций (подъездов). Расположен в перспективном развивающемся районе по 13 Магистрали с удобным выездом как на левый берег, так и в старую часть города. Вблизи Жилого комплекса распологается новая школа, парк отдыха и культуры.",
"obj_address":"ул. Мамышулы - 104, д. 16\/1",
"obj_address2":null,
"obj_url":"3fa07dd73be072b049529c80c7d74732",
"obj_planet":"1",
"obj_country":"1",
"obj_region":"1",
"obj_city":"292",
"obj_lat":"51.141",
"obj_lon":"71.4835",
"obj_insert_dt":null,
"obj_update_dt":null,
"obj_editted":"0",
"obj_updated":"0",
"obj_deleted":"0",
"obj_showed":"1",
"obj_rating":"0",
"obj_pro_top":"0",
"obj_pro_selected":"0",
"obj_pro_unix_dt":"0",
"obj_partner":"0",
"obj_parent_id":"0",
"obj_has_child":"0",
"obj_currency":"0"
},
// тут далее 2000+ объектов
]
}
SuperObject Время выполнения: ~01:393
JSON родной Время выполнения: ~01:690
разница не особо ощутима, тем более если будет меньше объектов
JSON родной
function JSONParse(const aJSONData: string; const aMemo: TMemo): boolean;
var
aJSValue: TJSONValue;
aJSObject, aJSObjArr: TJSONObject;
aJSArray: TJSONArray;
I: integer;
begin
Result := false;
aJSValue := TJSONObject.ParseJSONValue(aJSONData) as TJSONValue;
if Assigned(aJSValue) then
begin
aJSObject := aJSValue as TJSONObject;
aMemo.Lines.Add('status: ' + aJSObject.GetValue('status').Value);
if aJSObject.GetValue('status').Value = 'OK' then
begin
Result := true;
if Assigned(aJSObject) then
begin
aJSArray := aJSObject.GetValue('objects') as TJSONArray;
if Assigned(aJSArray) then
begin
Result := true;
aMemo.Lines.Add('last_id: ' + aJSObject.GetValue('last_id').Value);
aMemo.Lines.Add('count: ' + aJSArray.Count.ToString);
for I := 0 to aJSArray.Count - 1 do
begin
aJSObjArr := aJSArray.Items[I] as TJSONObject;
if Assigned(aJSObjArr) then
begin
aMemo.Lines.Add(aJSObjArr.GetValue('obj_id').Value + ',' + aJSObjArr.GetValue('obj_acc_id').Value + ',' +
aJSObjArr.GetValue('obj_cat_id').Value);
aMemo.Lines.Add(aJSObjArr.GetValue('obj_title').Value);
aMemo.Lines.Add(aJSObjArr.GetValue('obj_descr').Value);
aMemo.Lines.Add(aJSObjArr.GetValue('obj_address').Value);
aMemo.Lines.Add(aJSObjArr.GetValue('obj_url').Value);
end;
end;
end;
end;
end;
aJSValue.Free;
end;
end;
SuperObject
function JSONSOParse(const aJSONData: string; const aMemo: TMemo): boolean;
var
xObject: ISuperObject;
xCount, I: integer;
sfmt: string;
begin
Result := false;
xObject := SO(aJSONData);
aMemo.Lines.Add('status: ' + xObject['status'].AsString);
if xObject['status'].AsString = 'OK' then
begin
Result := true;
xCount := xObject['objects'].AsArray.Length;
aMemo.Lines.Add('count: ' + xCount.ToString);
aMemo.Lines.Add('last_id: ' + xObject['last_id'].AsInteger.ToString);
for I := 0 to xCount - 1 do
begin
aMemo.Lines.Add(xObject['objects[' + I.ToString + ']."obj_id"'].AsInteger.ToString + ',' +
xObject['objects[' + I.ToString + ']."obj_acc_id"'].AsInteger.ToString + ',' +
xObject['objects[' + I.ToString + ']."obj_cat_id"'].AsInteger.ToString);
aMemo.Lines.Add(xObject['objects[' + I.ToString + ']."obj_title"'].AsString);
aMemo.Lines.Add(xObject['objects[' + I.ToString + ']."obj_descr"'].AsString);
aMemo.Lines.Add(xObject['objects[' + I.ToString + ']."obj_address"'].AsString);
aMemo.Lines.Add(xObject['objects[' + I.ToString + ']."obj_url"'].AsString);
end;
end;
end;
Разница ощутима когда пишешь код, SO намного легче читать
Подробней почитать и скачать SO