Sample code for 30+ languages & platforms
Perl

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 Perl Downloads

Perl
use chilkat();

$success = 0;

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

# Load the JSON array into a JsonArray:
$jsonArray = chilkat::CkJsonArray->new();
$success = $jsonArray->LoadSb($sb);
if ($success != 1) {
    print $jsonArray->lastErrorText() . "\r\n";
    exit;
}

# Get some information from each record in the array.
$numRecords = $jsonArray->get_Size();
$i = 0;
while ($i < $numRecords) {
    print "------ Record " . $i . " -------" . "\r\n";

    # jsonRecord is a JsonObject
    $jsonRecord = $jsonArray->ObjectAt($i);

    # Examine information for this record
    $numTelefones = $jsonRecord->SizeOfArray("telefones");
    print "Number of telefones: " . $numTelefones . "\r\n";
    $j = 0;
    while ($j < $numTelefones) {
        $jsonRecord->put_J($j);
        print "  telefones numero: " . $jsonRecord->stringOf("telefones[j].numero") . "\r\n";
        print "  telefones tipo: " . $jsonRecord->stringOf("telefones[j].tipo") . "\r\n";
        print "  telefones id: " . $jsonRecord->stringOf("telefones[j].id") . "\r\n";
        $j = $j + 1;
    }

    print "cnpj: " . $jsonRecord->stringOf("cnpj") . "\r\n";
    print "rua: " . $jsonRecord->stringOf("rua") . "\r\n";
    # ...

    $numContatos = $jsonRecord->SizeOfArray("contatos");
    print "Number of contatos: " . $numContatos . "\r\n";
    $j = 0;
    while ($j < $numContatos) {
        $jsonRecord->put_J($j);

        $numTelefones = $jsonRecord->SizeOfArray("contatos[j].telefones");
        print "  Number of telefones: " . $numTelefones . "\r\n";
        $k = 0;
        while ($k < $numTelefones) {
            $jsonRecord->put_K($k);
            print "  telefones numero: " . $jsonRecord->stringOf("contatos[j].telefones[k].numero") . "\r\n";
            print "  telefones tipo: " . $jsonRecord->stringOf("contatos[j].telefones[k].tipo") . "\r\n";
            print "  telefones id: " . $jsonRecord->stringOf("contatos[j].telefones[k].id") . "\r\n";
            $k = $k + 1;
        }

        print "  cargo: " . $jsonRecord->stringOf("contatos[j].cargo") . "\r\n";

        $numEmails = $jsonRecord->SizeOfArray("contatos[j].emails");
        print "  Number of emails: " . $numEmails . "\r\n";
        $k = 0;
        while ($k < $numEmails) {
            $jsonRecord->put_K($k);
            print "  emails email: " . $jsonRecord->stringOf("contatos[j].emails[k].email") . "\r\n";
            print "  emails tipo: " . $jsonRecord->stringOf("contatos[j].emails[k].tipo") . "\r\n";
            print "  emails id: " . $jsonRecord->stringOf("contatos[j].emails[k].id") . "\r\n";
            $k = $k + 1;
        }

        $j = $j + 1;
    }

    $i = $i + 1;
}

# 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
#