2012-10-02 6 views
5

Mam następujący JSON z mojego serwera:Delphi/SuperObject - Dostęp podwęzłów

{ 
    "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" 
     } 
    } 
} 

Z SuperObjects mogę uzyskać liczbę "SERVICEAREA" 'sz

ob['areas'].AsObject.count 

Jak mogę teraz uzyskać dostęp do elementów różnych "SERVICEAREA"?

Dzięki za pomoc ...

Odpowiedz

7

Marjan ma odpowiedź dla Ciebie. Tutaj jest trochę więcej informacji na temat korzystania z właściwości artykuł na przykładzie:

var 
    item: ISuperObject; 
... 
for item in ob['areas'] do 
begin 
    WriteLn(item['id'].AsInteger); 
    WriteLn(item['area'].AsString); 
    WriteLn(item['version'].AsInteger); 
end; 
+0

Dziękuję ... to w końcu to, czego szukałem ... –

10

można uzyskać dostęp do elementów tablicy za pomocą pętli: for ... in

var 
    item: ISuperObject; 
begin 
    for item in ob['areas'] do ... 

lub bez wyliczający, stosując „normalne” dla pętli:

var 
    idx: Integer; 
    item: ISuperObject; 
begin 
    for idx := 0 to ob['areas'].AsArray.Length - 1 do 
    item := ob['areas'].AsArray[idx]; 
+0

ale wtedy pozycja zawiera: { "SERVICEAREA_XX1": { "id": "1", "obszar": "SERVICEAREA_XX1" "wersja": "3000", "usr_group": "0" } i sry ale jak acces tam obszar czy wersja? –

0

użyć tego kodu, jeśli chcesz uzyskać dostęp klucz/wartość (jak JavaScript for..in)

if ObjectFindFirst(JsonData, ite) then 
    with JsonData.AsObject do 
    repeat 
     PutO(ite.key, ite.val.Clone); 
    until not ObjectFindNext(ite); 
    ObjectFindClose(ite);