Delphi / SuperObject - Доступ к подузлам
У меня есть следующий JSON с моего сервера:
{
"userid":"12",
"username":"TestChar",
"logged":"yes",
"status":"Premium User",
"areas":{
"SERVICEAREA_XX1":{
"id":"1",
"area":"SERVICEAREA_XX1",
"version":"3000",
"usr_group":"0"
},
"SERVICEAREA_XX2":{
"id":"2",
"area":"SERVICEAREA_XX2",
"version":"31000",
"usr_group":"0"
},
"SERVICEAREA_XX3":{
"id":"3",
"area":"SERVICEAREA_XX3",
"version":"2000",
"usr_group":"1"
}
}
}
С SuperObjects я могу получить счет "SERVICEAREA" с
ob['areas'].AsObject.count
Как я могу теперь получить доступ к элементам различных "SERVICEAREA"?
Спасибо за вашу помощь...
3 ответа
Решение
У Марьян есть ответ для вас. Вот немного больше информации о том, как получить доступ к свойствам элемента на примере:
var
item: ISuperObject;
...
for item in ob['areas'] do
begin
WriteLn(item['id'].AsInteger);
WriteLn(item['area'].AsString);
WriteLn(item['version'].AsInteger);
end;
Вы можете получить доступ к элементам массива, используя for ... in
цикл:
var
item: ISuperObject;
begin
for item in ob['areas'] do ...
или без перечислителя, используя "нормальный" цикл for:
var
idx: Integer;
item: ISuperObject;
begin
for idx := 0 to ob['areas'].AsArray.Length - 1 do
item := ob['areas'].AsArray[idx];
Используйте этот код, если вы хотите получить доступ к ключу / значению (например, Javascriptfor..in
)
if ObjectFindFirst(JsonData, ite) then
with JsonData.AsObject do
repeat
PutO(ite.key, ite.val.Clone);
until not ObjectFindNext(ite);
ObjectFindClose(ite);