O JSON é uma notação aplicada em JavaScript para que seja possível a definição de objetos (estruturas) complexas. Sua forma de aplicação assemelha-se a um objeto abstraído do mundo real o qual trabalhamos em POO (Programação Orientada a Objetos), desta forma tomaremos como conhecimento base e necessário para um bom entendimento desse artigo, a Orientação a Objetos.

Além da possibilidade de estruturas complexas, o JSON nos fornece a capacidade de atribuir métodos de execução (funções) que estarão diretamente ligadas ao objeto criado, esta definição chama-se prototype. Abordarei prototype com mais detalhe nos próximos artigos.

O JSON é bastante utilizado para auxiliar a execução de chamadas AJAX onde o retorno obtido da execução no servidor obedece aos padrões de criação de objetos JSON para que os dados retornados possam ser lidos em JavaScript. Desta forma, a programação no servidor gera Strings que serão interpretadas no código JavaScript através da função Eval() ao qual dará a origem a um objeto em JavaScript.

Devido ao conceito de Orientação a Objetos aplicado ao JavaScript não é incomum que ao JSON sejam atribuídos atributos privados e públicos. Estes atributos terão comportamentos diferenciados dentro do objeto obedecendo às regras de modificadores utilizadas em Orientação a Objetos sendo que os atributos privados serão acessados apenas por códigos executados dentro dos métodos pertencentes ao objeto e os atributos públicos estarão disponíveis para acesso externo a quem instancia este objeto.

Existem duas formas de gerar objetos JSON.

  1. Trabalhando com construção do objeto a partir de funções as quais acabam por fazer papel de construtor do objeto JavaScript.
  2. Trabalhando com interpretação de Strings contendo os padrões de notação JSON.

Abaixo seguem os exemplos das consecutivas aplicações.

Criação de JSON a partir de funções

Segue abaixo um código que exemplifica a criação de JSON a partir de uma função.


function DefinicaoObjeto()
  {
   this.Atributo1 = "Primeiro Atributo"; //atributo público
   var Atributo2 = "Segundo Atributo"; //atributo privado
   this.ValorConcatenado = this.Atributo1 + " - " + Atributo2; //atributo publico;
  }
var meuObj = new DefinicaoObjeto(); // momento de criação do JSON
Listagem 01. Criação de objeto JSON a partir de uma função JavaScript

Note que temos duas definições de códigos com diferentes representações. A primeira é uma função como outra qualquer em JavaScript, porém esta função será utilizada como construtor do nosso objeto JSON. Para tal dentro dela fazemos uma referência ao próprio corpo utilizando a key “this” a qual indicamos que para este objeto existirá um atributo que demos o nome de “Atributo1”.

Utilizando esta notação estamos criando dentro do futuro objeto uma propriedade publica que estará acessível a quem instanciar este objeto. Esta propriedade torna-se publica pois utilizamos a key “this” ao qual, conforme dito acima, refere-se a um atributo pertencente ao objeto e não apenas ao código do contexto local.

A segunda notação ainda dentro da função define uma variável de nome “Atributo2”. Esta por sua vez tem o comportamento do segundo atributo do objeto porém este é privado não estando acessível a quem instanciar o objeto pos foi declarado como uma variável de contexto local da função.

A terceira e última notação ainda dentro da função define novamente um atributo de característica publica na qual fazemos uma concatenação dos dois valores atribuídos aos atributos anteriores o que gerará um produto resultante das duas atribuições ex: “Primeiro Atributo – Segundo Atributo”. A segunda definição de código abaixo do método declarado estamos instanciando um objeto a partir de nossa função/construtor definida anteriormente.

A partir deste momento, o objeto que definimos com o nome “meuObj” será um objeto, uma estrutura composta, em JavaScript que possuirá todas as definições declaradas na função utilizada como construtor para sua criação. Como exemplo podemos utilizar agora para obter os valores definidos o objeto instanciado “meuObj” e acessando seus atributos públicos.


alert(meuObj.Atributo1);
alert(meuObj.ValorConcatenado);
Listagem 2. Exemplo de utilização do objeto JSON instanciado

Note neste exemplo que eu não utilizei o atributo do objeto chamado “Atributo2” porque este tem característica privada, está disponível apenas para o contexto da função.

Abaixo segue um exemplo de uma página completa para executar o teste.


<HTML>
<HEAD>
<TITLE>Teste JSON</TITLE>
<script type="text/javascript">
  function DefinicaoObjeto()
  {
     this.Atributo1 = "Primeiro Atributo"; //atributo público
     var Atributo2 = "Segundo Atributo"; //atributo privado
     this.ValorConcatenado = this.Atributo1 + " - " + Atributo2; //atributo publico;
  }


  function TestarJSON()
  {
     var meuObj = new DefinicaoObjeto(); // momento de criação do JSON
     alert(meuObj.Atributo1);
     alert(meuObj.ValorConcatenado);
  }
</script>
</HEAD>
<BODY>
  <button onclick="TestarJSON();">Teste</button>
</BODY>
</HTML>
Listagem 3. Página HTML completa para execução do teste JSON

Uma alternativa de codificação para trabalhar com objetos JSON com criação a partir de funções é utilizar o construtor com entrada de parâmetros.

A forma como foi apresentada até então, uma forma simples, disponibiliza apenas definição de valores fixos dentro da função que gera o objeto, o que é pouco aplicável sendo que em nosso dia-a-dia precisamos trabalhar com muita informação dinâmica e muitos métodos que devem possuir comportamentos genéricos.

Bom para atender este tipo de necessidade esta notação de JSON possibilita que seja criado o objeto com entrada de parâmetros dando ao objeto uma capacidade maior de trabalhar com informações.

Abaixo um exemplo de aplicação do JSON com entrada de parâmetros.


function DefinicaoObjetoParametros(valor1,valor2,valor3)
{
   this.Atributo1 = valor1;
   this.Atributo2 = valor2;
   var Atributo3 = valor3;
   this.Soma = valor1 + valor2 + valor3;
}
Listagem 4. Exemplo de aplicação JSON com recepção de parâmetros

Confira também