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

Get the Root of a JSON Document

See more JSON Examples

Demonstrates how to get back to the JSON root object from anywhere in the JSON document. This example uses the following JSON document:
{
  "flower": "tulip",
  "abc":
    {
    "x": [
       { "a" : 1 },
       { "b1" : 100, "b2" : 200 },
       { "c" : 3 }
    ],
    "y": 200,
    "z": 200
    }
}

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;
  abcObj: TJsonObject;
  xArray: TJsonArray;
  bObj: TJsonObject;
  docRoot: TJsonObject;

begin
  success := False;

  json := TJsonObject.Create;

  jsonStr := '{"flower": "tulip","abc":{"x": [{ "a" : 1 },{ "b1" : 100, "b2" : 200 },{ "c" : 3 }],"y": 200,"z": 200}}';

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

  //  Get the "abc" object.
  abcObj := TJsonObject.Create;
  success := json.ObjectOf2('abc',abcObj);
  if (success = False) then
    begin
      WriteLn(json.LastErrorText);
      Exit;
    end;

  //  Side note: The JSON of a sub-part of the document can be emitted from any JSON object:
  abcObj.EmitCompact := False;
  WriteLn(abcObj.Emit());

  //  Navigate to the "x" array
  xArray := TJsonArray.Create;
  abcObj.ArrayOf2('x',xArray);

  //  Navigate to the 2nd object contained within the array.  This contains members b1 and b2
  bObj := TJsonObject.Create;
  xArray.ObjectAt2(1,bObj);

  //  Show that we're at "b1/b2".
  //  The value of "b1" should be "200"
  WriteLn('b2 = ' + bObj.IntOf('b2'));

  //  Now go back to the JSON doc root:
  docRoot := TJsonObject.Create;
  bObj.GetDocRoot2(docRoot);

  //  We'll skip the null check and assume it's non-null...

  //  Pretty-print the JSON doc from the root to show that this is indeed the root.
  docRoot.EmitCompact := False;
  WriteLn(docRoot.Emit());


  json.Free;
  abcObj.Free;
  xArray.Free;
  bObj.Free;
  docRoot.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.