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);
Другие вопросы по тегам