Sample code for 30+ languages & platforms
Tcl

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

Tcl

load ./chilkat.dll

set 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.
set sb [new_CkStringBuilder]

set bCrlf 1
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:
set jsonArray [new_CkJsonArray]

set success [CkJsonArray_LoadSb $jsonArray $sb]
if {$success != 1} then {
    puts [CkJsonArray_lastErrorText $jsonArray]
    delete_CkStringBuilder $sb
    delete_CkJsonArray $jsonArray
    exit
}

# Get some information from each record in the array.
set numRecords [CkJsonArray_get_Size $jsonArray]
set i 0
while {$i < $numRecords} {
    puts "------ Record $i -------"

    # jsonRecord is a CkJsonObject
    set jsonRecord [CkJsonArray_ObjectAt $jsonArray $i]

    # Examine information for this record
    set numTelefones [CkJsonObject_SizeOfArray $jsonRecord "telefones"]
    puts "Number of telefones: $numTelefones"
    set j 0
    while {$j < $numTelefones} {
        CkJsonObject_put_J $jsonRecord $j
        puts "  telefones numero: [CkJsonObject_stringOf $jsonRecord {telefones[j].numero}]"
        puts "  telefones tipo: [CkJsonObject_stringOf $jsonRecord {telefones[j].tipo}]"
        puts "  telefones id: [CkJsonObject_stringOf $jsonRecord {telefones[j].id}]"
        set j [expr $j + 1]
    }

    puts "cnpj: [CkJsonObject_stringOf $jsonRecord cnpj]"
    puts "rua: [CkJsonObject_stringOf $jsonRecord rua]"
    # ...

    set numContatos [CkJsonObject_SizeOfArray $jsonRecord "contatos"]
    puts "Number of contatos: $numContatos"
    set j 0
    while {$j < $numContatos} {
        CkJsonObject_put_J $jsonRecord $j

        set numTelefones [CkJsonObject_SizeOfArray $jsonRecord "contatos[j].telefones"]
        puts "  Number of telefones: $numTelefones"
        set k 0
        while {$k < $numTelefones} {
            CkJsonObject_put_K $jsonRecord $k
            puts "  telefones numero: [CkJsonObject_stringOf $jsonRecord {contatos[j].telefones[k].numero}]"
            puts "  telefones tipo: [CkJsonObject_stringOf $jsonRecord {contatos[j].telefones[k].tipo}]"
            puts "  telefones id: [CkJsonObject_stringOf $jsonRecord {contatos[j].telefones[k].id}]"
            set k [expr $k + 1]
        }

        puts "  cargo: [CkJsonObject_stringOf $jsonRecord {contatos[j].cargo}]"

        set numEmails [CkJsonObject_SizeOfArray $jsonRecord "contatos[j].emails"]
        puts "  Number of emails: $numEmails"
        set k 0
        while {$k < $numEmails} {
            CkJsonObject_put_K $jsonRecord $k
            puts "  emails email: [CkJsonObject_stringOf $jsonRecord {contatos[j].emails[k].email}]"
            puts "  emails tipo: [CkJsonObject_stringOf $jsonRecord {contatos[j].emails[k].tipo}]"
            puts "  emails id: [CkJsonObject_stringOf $jsonRecord {contatos[j].emails[k].id}]"
            set k [expr $k + 1]
        }

        set j [expr $j + 1]
    }

    delete_CkJsonObject $jsonRecord

    set i [expr $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
# 

delete_CkStringBuilder $sb
delete_CkJsonArray $jsonArray