2012-10-02 9 views
5

I私のサーバーから、次のJSONを持っている:私はどのように今私はできデルファイ/ SuperObject - アクセスサブノード

ob['areas'].AsObject.count 

での "SERVICEAREA」のカウント数を取得することができますSuperObjectsで

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

別の "SERVICEAREA"の要素にアクセスできますか?あなたの助けのための

おかげで...

答えて

7

Marjanさんがあなたに答えてくれました。あなたは(Javascriptのfor..inなど)のキー/値にアクセスしたい場合は、このコードは

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

ありがとうございました。これはついに私が探していたものです... –

10

あなたはfor ... inループを使って配列の要素にアクセスすることができます。

:ループのための「標準」を使用して
var 
    item: ISuperObject; 
begin 
    for item in ob['areas'] do ... 

または列挙子なし

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

が、その後の項目は含まれています。ここでは一例でアイテムのプロパティにアクセスする方法をもう少し情報は以下のとおりです。 { "SERVICEAREA_XX1":{ "ID": "1"、 "エリア": "SERVICEAREA_XX1"、 "バージョン": "3000"、 "usr_group": "0" }及びSRYが、どのアクセスもします地域やバージョンは? –

0

使用

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