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

Insert JSON Array into another JSON Object

See more JSON Examples

Demonstrates how to insert a JSON array into a JSON object.

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
  jsonA: TJsonObject;
  jsonB: TJsonObject;
  jsonUsersDest: TJsonArray;
  jsonUsersSrc: TJsonArray;

begin
  //  Imagine we have two separate JSON objects.
  jsonA := TJsonObject.Create;
  jsonA.UpdateString('ciphertext','encryptedData');
  jsonA.UpdateInt('status',200);
  jsonA.UpdateString('error','errorMsg');

  jsonA.EmitCompact := False;
  WriteLn(jsonA.Emit());

  //  jsonA contains:

  //  {
  //    "ciphertext": "encryptedData",
  //    "status": 200,
  //    "error": "errorMsg"
  //  }

  jsonB := TJsonObject.Create;
  jsonB.UpdateString('users[0].role','Surgeon');
  jsonB.UpdateNewArray('users[0].sub_roles');
  jsonB.UpdateBool('users[0].viewable_for_sharing',True);
  jsonB.UpdateInt('users[0].eula_create_date',123);
  jsonB.UpdateString('users[1].role','Support');
  jsonB.UpdateString('users[1].sub_roles[0]','Tech');
  jsonB.UpdateString('users[1].sub_roles[1]','Service');
  jsonB.UpdateBool('users[1].viewable_for_sharing',True);
  jsonB.UpdateInt('users[1].eula_create_date',123);

  jsonB.EmitCompact := False;
  WriteLn(jsonB.Emit());

  //  jsonB contains:

  //  {
  //    "users": [
  //      {
  //        "role": "Surgeon",
  //        "sub_roles": [],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 1649108922482
  //      },
  //      {
  //        "role": "Support",
  //        "sub_roles": [
  //          "Tech",
  //          "Service"
  //        ],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 1649108951523
  //      }
  //    ]
  //  }

  //  Let's say we want to insert jsonB into jsonA to get this:

  //  {
  //    "ciphertext": "encryptedData",
  //    "status": 200,
  //    "error": "errorMsg",
  //    "users": [
  //      {
  //        "role": "Surgeon",
  //        "sub_roles": [],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 1649108922482
  //      },
  //      {
  //        "role": "Support",
  //        "sub_roles": [
  //          "Tech",
  //          "Service"
  //        ],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 1649108951523
  //      }
  //    ]
  //  }

  //  The destination is the empty "users" array, the source is the populated "users" array in jsonB.
  jsonUsersDest := TJsonArray.Create;
  jsonA.AppendArray2('users',jsonUsersDest);

  jsonUsersSrc := TJsonArray.Create;
  jsonB.ArrayOf2('users',jsonUsersSrc);

  //  Copy the array items from source to dest
  jsonUsersDest.AppendArrayItems(jsonUsersSrc);

  WriteLn(jsonA.Emit());

  //  The end result is this:

  //  {
  //    "ciphertext": "encryptedData",
  //    "status": 200,
  //    "error": "errorMsg",
  //    "users": [
  //      {
  //        "role": "Surgeon",
  //        "sub_roles": [
  //        ],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 123
  //      },
  //      {
  //        "role": "Support",
  //        "sub_roles": [
  //          "Tech",
  //          "Service"
  //        ],
  //        "viewable_for_sharing": true,
  //        "eula_create_date": 123
  //      }
  //    ]
  //  }


  jsonA.Free;
  jsonB.Free;
  jsonUsersDest.Free;
  jsonUsersSrc.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.