Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi: Accessing JSON Objects within a JSON Array

I have a JSON Object, let's name it jObject that looks like this:

{
  "id": 0,
  "data": "[{DAT_INCL: \"08/03/2012 10:07:08\", NUM_ORDE: 1, NUM_ATND: 1, NUM_ACAO: 2, NUM_RESU: 3},
            {DAT_INCL: \"08/03/2012 10:07:09\", NUM_ORDE: 2, NUM_ATND: 1, NUM_ACAO: 4, NUM_RESU: 5},
            {DAT_INCL: \"08/03/2012 10:07:09\", NUM_ORDE: 3, NUM_ATND: 1, NUM_ACAO: 8, NUM_RESU: NULL}]"
}

As you can see, it contains two pairs, one of which is an array with three objects in this case (the amount of objects is dynamic) with multiple "key: values"(these don't vary, being always the same 5 fields), which I want to insert into an SQL database, "key" being column, "value" being field. Question is, how do I access each object individually?

Code-wise what I did was extract the pair that contained this array by putting it in jPair

jPair := OriginalObject.Get(1); 

and then captured the array

jArray:= TJSONArray(jPair.JsonValue);

(Also, as a bonus, when I evaluate jArray.Size, the result is 6226004. What?)

like image 747
bpromas Avatar asked Mar 07 '12 20:03

bpromas


1 Answers

If you have an array from DBXJSON, then it is a TJSONArray. Call its Get method to get an element of the array.

var
  Value: TJSONValue;

Value := jArray.Get(0);

You can also go through the entire array with a for loop:

for Value in jArray do

But if you check the Size property and get 6226004 instead of 3, that suggests there's something else wrong here. My guess is that what you think is a TJSONArray isn't really that type. Use as to do a checked type cast:

jArray := jPair.JsonValue as TJSONArray;

You'll get an EInvalidCast exception if that fails.

like image 50
Rob Kennedy Avatar answered Oct 05 '22 21:10

Rob Kennedy