Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

JSON: Nested Array

See more JSON Examples

Here we have a JSON object that contains nested arrays. This example demonstrates how to access the contents of the nested arrays.
{
 "numbers" : [ 
    ["even", 2, 4, 6, 8], 
    ["prime", 2, 3, 5, 7, 11, 13] 
  ] }

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.JsonArray,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  json: TJsonObject;
  jsonStr: string;
  outerArray: TJsonArray;
  numArrays: Integer;
  i: Integer;
  innerArray: TJsonArray;
  numInnerItems: Integer;
  j: Integer;

begin
  success := False;

  json := TJsonObject.Create;

  //  This is the above JSON with whitespace chars removed (SPACE, TAB, CR, and LF chars).
  //  The presence of whitespace chars for pretty-printing makes no difference to the Load
  //  method. 
  jsonStr := '{ "numbers" : [ ["even", 2, 4, 6, 8], ["prime", 2, 3, 5, 7, 11, 13] ] }';

  success := json.Load(jsonStr);
  if (success <> True) then
    begin
      WriteLn(json.LastErrorText);
      Exit;
    end;

  //  Get the value of the "numbers" object, which is an array that contains JSON arrays.
  outerArray := json.ArrayOf('numbers');
  if (json.LastMethodSuccess = False) then
    begin
      WriteLn('numbers array not found.');
      Exit;
    end;

  numArrays := outerArray.Size;

  for i := 0 to numArrays - 1 do
    begin

      innerArray := outerArray.ArrayAt(i);

      //  The first item in the innerArray is a string
      WriteLn(innerArray.StringAt(0) + ':');

      numInnerItems := innerArray.Size;

      for j := 1 to numInnerItems - 1 do
        begin

          WriteLn('  ' + innerArray.IntAt(j));

        end;

      innerArray.Free;
    end;

  outerArray.Free;


  json.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.