2012-10-02 16 views
5

tengo el siguiente JSON de mi servidor:Delphi/SuperObject - subnodos Acceso

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

Con SuperObjects puedo conseguir la cuenta de "SERVICEAREA" 's con

ob['areas'].AsObject.count 

¿Cómo puedo ahora obtener acceso a los elementos de los diferentes "SERVICEAREA" 's?

Gracias por su ayuda ...

Respuesta

7

Marjan tiene la respuesta para usted. Aquí es un poco más información sobre cómo acceder a las propiedades de los elementos con un ejemplo:

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

Gracias ... esto es finalmente lo que estaba buscando ... –

10

se puede acceder a los elementos de una matriz mediante un bucle for ... in:

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

o sin un enumerador, utilizando un 'normal' para bucle:

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

pero luego elemento contiene: { "SERVICEAREA_XX1": "zona" "1":: "SERVICEAREA_XX1", "versión": "3000", "usr_group": { "id" "0" } y sry pero la forma de acces hay área o versión entonces? –

0

uso de este código si desea acceder a la clave/valor (como 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);