Appearance
Accessing Child Elements Of JSON Objects And Arrays
JSON Objects
We can access child elements of a TJSONValue object by using square brackets syntax with a path:
Object[‘path.to.a.value’]
Or a sequence of square brackets with paths, because each [] call simply returns another TJSONValue:
Object[‘path’][‘to’][‘a’][‘value’]
Dots in the path allow to get access to child elements. For arrays square brackets with indices can be used:
Object[‘subobject.subarray[2].key’]
The result of the square brackets operator is a TJSONValue object, so it must be tested for a specific type before accessing its values.
The result of the square brackets operator is nil, if the specified path does not exist in the object.
pascal
var
obj: TJSONObject;
begin
obj := TJSONValue.Parse(‘{“boolValue”: true}’) as TJSONObject;
if obj[‘boolValue’].IsBoolean then
begin
if obj[‘boolValue’].AsBoolean then
LogInfo(‘The boolean value is true’)
else
LogInfo(‘The boolean value is false);
end;
obj.Free;
end;The following list of TJSONValue methods can be used to cast its value into one of the types:
- AsString – returns a standard string value (not a TJSONString object)
- AsInt – returns a standard integer value (not a TJSONNumber object)
- AsInt64 – returns a standard int64 value (not a TJSONNumber object)
- AsNumber – returns a standard double value (not a TJSONNumber object)
- AsBoolean – returns a standard boolean value (not a TJSONBool object)
- AsObject – returns a TJSONObject object (we used it for downcasting in our samples)
- AsArray – returns a TJSONArray object
These methods may throw an error if the casting or conversion can not be done due to a type mismatch. If you are not sure what the type of the value is, use one of the methods described in “JSON Variable Types” first.
JSON Arrays
If you have a TJSONArray object, you can access its elements by an integer index using square brackets syntax:
LogInfo(Array[0].AsString);
Remember: Elements of a JSON array are zero indexed. So they can be accessed by the following indices:
[0 … Count – 1]
You can also obtain a number of children of a JSON array using Count method and iterate through the elements as in the example:
pascal
var
arr: TJSONArray;
i: integer;
begin
arr := TJSONValue.Parse('["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]') as TJSONArray;
for i := 0 to arr.Count - 1 do
LogInfo(arr[i].AsString);
arr.Free;
end;Output
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

