---
url: >-
  /statelake/scripting-reference/json-for-scripts/accessing-child-elements-of-json-objects-and-arrays.md
---

# 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
