8

I have the following JSON from my server:

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

With SuperObjects i can get the count of "SERVICEAREA"'s with

ob['areas'].AsObject.count

How can i now get access to the elements of the different "SERVICEAREA"'s?

Thanks for your help...

Jan Doggen
  • 8,799
  • 13
  • 70
  • 144
Michael Grenzer
  • 503
  • 1
  • 9
  • 20

3 Answers3

12

you can access elements of an array using a for ... in loop:

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

or without an enumerator, using a 'normal' for loop:

var
  idx: Integer;
  item: ISuperObject;
begin
  for idx := 0 to ob['areas'].AsArray.Length - 1 do
    item := ob['areas'].AsArray[idx];
Jan Doggen
  • 8,799
  • 13
  • 70
  • 144
Marjan Venema
  • 19,136
  • 6
  • 65
  • 79
  • but then item contains: { "SERVICEAREA_XX1":{ "id":"1", "area":"SERVICEAREA_XX1", "version":"3000", "usr_group":"0" } and sry but how to acces there area or version then? – Michael Grenzer Oct 02 '12 at 12:35
9

Marjan has the answer for you. Here is a little more information how to access the item properties with an example:

var
  item: ISuperObject;
...
for item in ob['areas'] do
begin
  WriteLn(item['id'].AsInteger);
  WriteLn(item['area'].AsString);
  WriteLn(item['version'].AsInteger);
end;
LU RD
  • 34,438
  • 5
  • 88
  • 296
0

use this code If you want to access key/value(like Javascriptfor..in)

 if ObjectFindFirst(JsonData, ite) then
    with JsonData.AsObject do
    repeat
      PutO(ite.key, ite.val.Clone);
    until not ObjectFindNext(ite);
    ObjectFindClose(ite);
MajidTaheri
  • 3,813
  • 6
  • 28
  • 46