Sample code for 30+ languages & platforms
Delphi DLL

Loading and Parsing a Complex JSON Array

See more JSON Examples

This example loads a JSON array containing more complex data. It shows how to parse (access) various values contained within the JSON.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, JsonArray, StringBuilder, JsonObject;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sb: HCkStringBuilder;
bCrlf: Boolean;
jsonArray: HCkJsonArray;
numRecords: Integer;
i: Integer;
jsonRecord: HCkJsonObject;
numTelefones: Integer;
j: Integer;
numContatos: Integer;
k: Integer;
numEmails: Integer;

begin
success := False;

// This is the JSON we'll be loading:

// 	[
// 	  {
// 	    "telefones": [
// 	      {
// 	        "numero": "19995555555",
// 	        "tipo": "T",
// 	        "id": 2541437
// 	      } 
// 	    ],
// 	    "cnpj": "11395551000164",
// 	    "rua": "R XAVIER AUGUSTO ROGGE, 22",
// 	    "complemento": "",
// 	    "contatos": [
// 	    ],
// 	    "tipo": "J",
// 	    "razao_social": "SOUP BRASIL LTDA - ME",
// 	    "nome_fantasia": "SOUP BRASIL",
// 	    "bairro": "ABC DOS COLIBRIS",
// 	    "cidade": "TEST",
// 	    "inscricao_estadual": "222.102.222.116",
// 	    "observacao": "",
// 	    "id": 2209595,
// 	    "ultima_alteracao": "2016-12-26 16:22:34",
// 	    "cep": "13555000",
// 	    "suframa": "",
// 	    "estado": "SP",
// 	    "emails": [
// 	      {
// 	        "email": "somebody@terra.com.br",
// 	        "tipo": "T",
// 	        "id": 1065557
// 	      } 
// 	    ],
// 	    "excluido": false
// 	  },
// 	  {
// 	    "telefones": [
// 	    ],
// 	    "cnpj": "12496555500180",
// 	    "rua": "AV ROLF WIEST, 100",
// 	    "complemento": "ANDAR 7 SALA 612 A 620",
// 	    "contatos": [
// 	    ],
// 	    "tipo": "J",
// 	    "razao_social": "SIMPLE SOFTWARE LTDA",
// 	    "nome_fantasia": "",
// 	    "bairro": "DOM ZETIRO",
// 	    "cidade": "APARTVILLE",
// 	    "inscricao_estadual": "",
// 	    "observacao": "",
// 	    "id": 2255594,
// 	    "ultima_alteracao": "2016-12-26 16:28:31",
// 	    "cep": "89255505",
// 	    "suframa": "",
// 	    "estado": "SC",
// 	    "emails": [
// 	    ],
// 	    "excluido": false
// 	  },
// 	  {
// 	    "telefones": [
// 	      {
// 	        "numero": "1938655556",
// 	        "tipo": "T",
// 	        "id": 2555438
// 	      } 
// 	    ],
// 	    "cnpj": "00003555500153",
// 	    "rua": "AV ABCDEF PINTO CATAO, 18",
// 	    "complemento": "",
// 	    "contatos": [
// 	      {
// 	        "telefones": [
// 	          {
// 	            "numero": "1999655554",
// 	            "tipo": "T",
// 	            "id": 2555559
// 	          } 
// 	        ],
// 	        "cargo": "zzz de compras",
// 	        "nome": "Gerard",
// 	        "emails": [
// 	          {
// 	            "email": "gerard@terra.com.br",
// 	            "tipo": "T",
// 	            "id": 1065559
// 	          } 
// 	        ],
// 	        "id": 844485,
// 	        "excluido": false
// 	      } 
// 	    ],
// 	    "tipo": "J",
// 	    "razao_social": "TIDY TECNOLOGIA LTDA - EPP",
// 	    "nome_fantasia": "TIDY",
// 	    "bairro": "TUNA",
// 	    "cidade": "JAGUAR",
// 	    "inscricao_estadual": "395.222.441.222",
// 	    "observacao": "ligar sempre depois das 14hs",
// 	    "id": 2255597,
// 	    "ultima_alteracao": "2016-12-28 07:31:52",
// 	    "cep": "13555500",
// 	    "suframa": "",
// 	    "estado": "SP",
// 	    "emails": [
// 	      {
// 	        "email": "xi@tidy.com.br",
// 	        "tipo": "T",
// 	        "id": 10655558
// 	      } 
// 	    ],
// 	    "excluido": false
// 	  } 
// 	]
// 

// Construct a StringBuilder containing the above JSON array.
sb := CkStringBuilder_Create();
bCrlf := True;
CkStringBuilder_AppendLine(sb,'[',bCrlf);
CkStringBuilder_AppendLine(sb,'  {',bCrlf);
CkStringBuilder_AppendLine(sb,'    "telefones": [',bCrlf);
CkStringBuilder_AppendLine(sb,'      {',bCrlf);
CkStringBuilder_AppendLine(sb,'        "numero": "19995555555",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "id": 2541437',bCrlf);
CkStringBuilder_AppendLine(sb,'      }',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cnpj": "11395551000164",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "rua": "R XAVIER AUGUSTO ROGGE, 22",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "complemento": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "contatos": [',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "tipo": "J",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "razao_social": "SOUP BRASIL LTDA - ME",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "nome_fantasia": "SOUP BRASIL",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "bairro": "ABC DOS COLIBRIS",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cidade": "TEST",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "inscricao_estadual": "222.102.222.116",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "observacao": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "id": 2209595,',bCrlf);
CkStringBuilder_AppendLine(sb,'    "ultima_alteracao": "2016-12-26 16:22:34",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cep": "13555000",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "suframa": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "estado": "SP",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "emails": [',bCrlf);
CkStringBuilder_AppendLine(sb,'      {',bCrlf);
CkStringBuilder_AppendLine(sb,'        "email": "somebody@terra.com.br",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "id": 1065557',bCrlf);
CkStringBuilder_AppendLine(sb,'      }',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "excluido": false',bCrlf);
CkStringBuilder_AppendLine(sb,'  },',bCrlf);
CkStringBuilder_AppendLine(sb,'  {',bCrlf);
CkStringBuilder_AppendLine(sb,'    "telefones": [',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cnpj": "12496555500180",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "rua": "AV ROLF WIEST, 100",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "complemento": "ANDAR 7 SALA 612 A 620",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "contatos": [',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "tipo": "J",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "razao_social": "SIMPLE SOFTWARE LTDA",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "nome_fantasia": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "bairro": "DOM ZETIRO",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cidade": "APARTVILLE",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "inscricao_estadual": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "observacao": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "id": 2255594,',bCrlf);
CkStringBuilder_AppendLine(sb,'    "ultima_alteracao": "2016-12-26 16:28:31",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cep": "89255505",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "suframa": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "estado": "SC",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "emails": [',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "excluido": false',bCrlf);
CkStringBuilder_AppendLine(sb,'  },',bCrlf);
CkStringBuilder_AppendLine(sb,'  {',bCrlf);
CkStringBuilder_AppendLine(sb,'    "telefones": [',bCrlf);
CkStringBuilder_AppendLine(sb,'      {',bCrlf);
CkStringBuilder_AppendLine(sb,'        "numero": "1938655556",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "id": 2555438',bCrlf);
CkStringBuilder_AppendLine(sb,'      }',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cnpj": "00003555500153",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "rua": "AV ABCDEF PINTO CATAO, 18",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "complemento": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "contatos": [',bCrlf);
CkStringBuilder_AppendLine(sb,'      {',bCrlf);
CkStringBuilder_AppendLine(sb,'        "telefones": [',bCrlf);
CkStringBuilder_AppendLine(sb,'          {',bCrlf);
CkStringBuilder_AppendLine(sb,'            "numero": "1999655554",',bCrlf);
CkStringBuilder_AppendLine(sb,'            "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'            "id": 2555559',bCrlf);
CkStringBuilder_AppendLine(sb,'          }',bCrlf);
CkStringBuilder_AppendLine(sb,'        ],',bCrlf);
CkStringBuilder_AppendLine(sb,'        "cargo": "zzz de compras",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "nome": "Gerard",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "emails": [',bCrlf);
CkStringBuilder_AppendLine(sb,'          {',bCrlf);
CkStringBuilder_AppendLine(sb,'            "email": "gerard@terra.com.br",',bCrlf);
CkStringBuilder_AppendLine(sb,'            "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'            "id": 1065559',bCrlf);
CkStringBuilder_AppendLine(sb,'          }',bCrlf);
CkStringBuilder_AppendLine(sb,'        ],',bCrlf);
CkStringBuilder_AppendLine(sb,'        "id": 844485,',bCrlf);
CkStringBuilder_AppendLine(sb,'        "excluido": false',bCrlf);
CkStringBuilder_AppendLine(sb,'      }',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "tipo": "J",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "razao_social": "TIDY TECNOLOGIA LTDA - EPP",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "nome_fantasia": "TIDY",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "bairro": "TUNA",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cidade": "JAGUAR",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "inscricao_estadual": "395.222.441.222",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "observacao": "ligar sempre depois das 14hs",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "id": 2255597,',bCrlf);
CkStringBuilder_AppendLine(sb,'    "ultima_alteracao": "2016-12-28 07:31:52",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "cep": "13555500",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "suframa": "",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "estado": "SP",',bCrlf);
CkStringBuilder_AppendLine(sb,'    "emails": [',bCrlf);
CkStringBuilder_AppendLine(sb,'      {',bCrlf);
CkStringBuilder_AppendLine(sb,'        "email": "xi@tidy.com.br",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "tipo": "T",',bCrlf);
CkStringBuilder_AppendLine(sb,'        "id": 10655558',bCrlf);
CkStringBuilder_AppendLine(sb,'      }',bCrlf);
CkStringBuilder_AppendLine(sb,'    ],',bCrlf);
CkStringBuilder_AppendLine(sb,'    "excluido": false',bCrlf);
CkStringBuilder_AppendLine(sb,'  }',bCrlf);
CkStringBuilder_AppendLine(sb,']',bCrlf);

// Load the JSON array into a JsonArray:
jsonArray := CkJsonArray_Create();
success := CkJsonArray_LoadSb(jsonArray,sb);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkJsonArray__lastErrorText(jsonArray));
    Exit;
  end;

// Get some information from each record in the array.
numRecords := CkJsonArray_getSize(jsonArray);
i := 0;
while i < numRecords do
  begin
    Memo1.Lines.Add('------ Record ' + IntToStr(i) + ' -------');

    jsonRecord := CkJsonArray_ObjectAt(jsonArray,i);

    // Examine information for this record
    numTelefones := CkJsonObject_SizeOfArray(jsonRecord,'telefones');
    Memo1.Lines.Add('Number of telefones: ' + IntToStr(numTelefones));
    j := 0;
    while j < numTelefones do
      begin
        CkJsonObject_putJ(jsonRecord,j);
        Memo1.Lines.Add('  telefones numero: ' + CkJsonObject__stringOf(jsonRecord,'telefones[j].numero'));
        Memo1.Lines.Add('  telefones tipo: ' + CkJsonObject__stringOf(jsonRecord,'telefones[j].tipo'));
        Memo1.Lines.Add('  telefones id: ' + CkJsonObject__stringOf(jsonRecord,'telefones[j].id'));
        j := j + 1;
      end;

    Memo1.Lines.Add('cnpj: ' + CkJsonObject__stringOf(jsonRecord,'cnpj'));
    Memo1.Lines.Add('rua: ' + CkJsonObject__stringOf(jsonRecord,'rua'));
    // ...

    numContatos := CkJsonObject_SizeOfArray(jsonRecord,'contatos');
    Memo1.Lines.Add('Number of contatos: ' + IntToStr(numContatos));
    j := 0;
    while j < numContatos do
      begin
        CkJsonObject_putJ(jsonRecord,j);

        numTelefones := CkJsonObject_SizeOfArray(jsonRecord,'contatos[j].telefones');
        Memo1.Lines.Add('  Number of telefones: ' + IntToStr(numTelefones));
        k := 0;
        while k < numTelefones do
          begin
            CkJsonObject_putK(jsonRecord,k);
            Memo1.Lines.Add('  telefones numero: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].telefones[k].numero'));
            Memo1.Lines.Add('  telefones tipo: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].telefones[k].tipo'));
            Memo1.Lines.Add('  telefones id: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].telefones[k].id'));
            k := k + 1;
          end;

        Memo1.Lines.Add('  cargo: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].cargo'));

        numEmails := CkJsonObject_SizeOfArray(jsonRecord,'contatos[j].emails');
        Memo1.Lines.Add('  Number of emails: ' + IntToStr(numEmails));
        k := 0;
        while k < numEmails do
          begin
            CkJsonObject_putK(jsonRecord,k);
            Memo1.Lines.Add('  emails email: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].emails[k].email'));
            Memo1.Lines.Add('  emails tipo: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].emails[k].tipo'));
            Memo1.Lines.Add('  emails id: ' + CkJsonObject__stringOf(jsonRecord,'contatos[j].emails[k].id'));
            k := k + 1;
          end;

        j := j + 1;
      end;

    CkJsonObject_Dispose(jsonRecord);
    i := i + 1;
  end;

// The output for the above code is:

// 	------ Record 0 -------
// 	Number of telefones: 1
// 	  telefones numero: 19995555555
// 	  telefones tipo: T
// 	  telefones id: 2541437
// 	cnpj: 11395551000164
// 	rua: R XAVIER AUGUSTO ROGGE, 22
// 	Number of contatos: 0
// 	------ Record 1 -------
// 	Number of telefones: 0
// 	cnpj: 12496555500180
// 	rua: AV ROLF WIEST, 100
// 	Number of contatos: 0
// 	------ Record 2 -------
// 	Number of telefones: 1
// 	  telefones numero: 1938655556
// 	  telefones tipo: T
// 	  telefones id: 2555438
// 	cnpj: 00003555500153
// 	rua: AV ABCDEF PINTO CATAO, 18
// 	Number of contatos: 1
// 	  Number of telefones: 1
// 	  telefones numero: 1999655554
// 	  telefones tipo: T
// 	  telefones id: 2555559
// 	  cargo: zzz de compras
// 	  Number of emails: 1
// 	  emails email: gerard@terra.com.br
// 	  emails tipo: T
// 	  emails id: 1065559
// 

CkStringBuilder_Dispose(sb);
CkJsonArray_Dispose(jsonArray);

end;