desenvolvimento para web

JSON – JavaScript Object Notation

JSON - JavaScript Object Notation

Já não é nenhuma novidade no mundo de desenvolvimento web o uso e abuso da tecnologia JSON. Entretanto, nem todos conhecem este padrão de intercâmbio facilitado de dados entre aplicações. Não é obrigatório, mas saber JSON pode ser bastante útil em projetos um pouco mais sofisticados e/ou que necessitam de uma demanda/política de transferência de dados mais simples, leve e eficiente.

Usar JSON proporciona inúmeras vantagens ao desenvolvedor web. Desde a simplicidade em tratar os dados à maneira fácil como é possível integrar tecnologias client-side com server-side, o JSON certamente é bastante recomendado.

O que é e para que serve JSON

JSON é o acrônimo para “JavaScript  Object  Notation“. Como é possível notar pelo nome, originalmente o JSON foi concebido para se trabalhar com javascript, mas, já adiantando, não é necessariamente obrigatório o uso de javascript para seu uso, dado que, atualmente, é possível utilizar JSON com mais de 20 linguagens de programação diferentes.

Uma definição interessante é a do Wikiédia:

JSON (com a pronuncia djeisón), um acrônimo para “JavaScript Object Notation”, é um formato leve para intercâmbio de dados computacionais. JSON é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer javascript, exclusivamente.

O formato JSON foi originalmente criado por Douglas Crockford e é descrito no RFC 4627. O media-type oficial do JSON é application/json e a extensão é .json.

Mas uma definição que explica, de forma bem mais simples e objetiva, é a de Tiago Belem, em seu artigo “Introdução a JSON e PHP“, no qual consta que

JSON é um padrão de formatação de dados que serão transmitidos entre duas aplicações de linguagens diferentes.

Quer dizer, JSON é usado, principalmente, para permitir a troca de dados entre linguagens. Mas não só isso, ele também é ótimo para lidar com webservices e tem muitos outros usos.

Vantagens em se usar JSON

A descrição de dados em JSON é bem fácil, não passando de um documento de texto puro disposto em um padrão simples. Conforme foi explicado, JSON é excelente para intercâmbio de informações entre aplicativos.

Mas também existem outras maneiras de se fazer isso, por exemplo, com XML. Entretanto, o JSON apresenta vantagens bastante interessantes, o que, após uma análise do caso de seu aplicativo ou sistema web, pode levá-lo a optar por ele. Algumas das vantagens são:

Estruturas JSON

É possível ver alguns diagramas das estruturas no próprio site oficial do JSON; basicamente, é o seguinte:

JSON: estruturas

Vamos ver, então, como podemos descrever dados simples usando o que a sintaxe que ele nos oferece.

Arrays

Por exemplo, vamos ver como seria um array dos dias da semana:

["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]

Perceba que strings devem ser indicadas com aspas duplas.

Elementos separados por vírgulas entre colchetes é a notação JSON para um array (naturalmente, a vírgula delimita cada item). A maioria dos desenvolvedores prefere identar um pouco o código para facilitar a leitura:

[
	"Domingo",
	"Segunda",
	"Terça",
	"Quarta",
	"Quinta",
	"Sexta",
	"Sábado"
]

É possível, também, misturar diversos tipos de dados em um só array:

[
	33,
	"Segunda",
	TRUE,
	3.14159265,
        NULL,
        "maçã"
]

Objetos

Como vimos, arrays são representados por colcechetes. No caso de objetos, estes são representados por chaves; cada chave é identificada por uma string e, depois de um dois-pontos, os valores de cada item especificados. Fica mais claro com um exemplo:

1e515dd83f72dc80abf86877aaf9c8e9003

Perceba que não tem importância haver espaços a mais ou a menos entre a descrição da chave, o separador “:” e o valor desta. Tudo será interpretado corretamente.

Alguns exemplos

É bastante simples descrever JSON, você viu. Como os objetos de qualquer outra linguagem de programação, é possível armazenar quaisquer tipos de dados e quantos dados se desejar. Veja este exemplo:

{
    "Marconildo":
    {
        "url": "http://www.marconildo.com.br/",
        "idade": 34
    },
    "Joanorta":
    {
        "url": "http://www.joanorta.com.br/",
        "idade": 22
    },
    "Estripafurgia":
    {
        "url": "http://www.estripafurgia.com.br/",
        "idade": 47
    }
}

Perceba que, neste caso, cada objeto possui, “url” e “idade” (provavelmente este não seria um exemplo “da vida real”, mas dá para ilustrar bem o conceito), mas, não necessariamente, todos devem possuir o mesmo número de propriedades. Poderia haver um ou mais elementos com “url”, “idade”, “altura”, “endereco”, etc. É possível, inclusive, a utilização de arrays:

{
    "Marconildo":
    {
        "url": "http://www.marconildo.com.br/",
        "idade": 34
    },
    "Joanorta":
    {
        "url": "http://www.joanorta.com.br/",
        "idade": 22
    },
    "Estripafurgia":
    {
        "url": "http://www.estripafurgia.com.br/",
        "idade": 47,
    	"diasDeTrabalho":
	 [
	     "Segunda",
	     "Quarta",
	     "Sexta"
	 ]
    }
}

E, até, um array de objetos!

{
    "Marconildo":
    {
        "url": "http://www.marconildo.com.br/",
        "idade": 34
    },
    "Joanorta":
    {
        "url": "http://www.joanorta.com.br/",
        "idade": 22
    },
    "Estripafurgia":
    {
        "url": "http://www.estripafurgia.com.br/",
        "idade": 47,
    	"dependentes":
    	[
    	    "Astolfinho":
	    {
	        "sexo" : "m",
	        "idade": 16
	    },
    	    "Mariazinha":
	    {
	        "sexo" : "f",
	        "idade": 10
	    }
    	]
    }
}

JSON e javascript

Agora você já aprendeu as notações básicas do JSON, mas o que fazer com isso, como usar, efetivamente, o poder do JSON nas aplicações do dia-a-dia usando javascript? Veja um exemplo simples:

var funcionarios = '
	{
	    "Marconildo":
	    {
	        "url": "http://www.marconildo.com.br/",
	        "idade": 34
	    },
	    "Joanorta":
	    {
	        "url": "http://www.joanorta.com.br/",
	        "idade": 22
	    },
	    "Estripafurgia":
	    {
	        "url": "http://www.estripafurgia.com.br/",
	        "idade": 47
	    }
	}
';
 
var funcionario = JSON.parse(funcionarios);
 
alert(funcionario.Marconildo);
alert(funcionario.Marconildo.idade);

Foi criada a variável “funcionarios” e colocado uma string JSON nela. Usando a função JSON.parse, convertemos a string para, efetivamente, JSON na variável “funcionario”e, a partir daí, foi possível acessar todas suas propriedades com a notação padrão de OO.

Esse foi um exemplo ilustrativo. Em aplicações “de verdade”, seria bastante eficiente, por exemplo, realizar requisições em AJAX para procurar retornos em JSON e, a partir daí, realizar quaisquer tipos de operação com o data retornado. Trataremos disso em artigos futuros. Assine o feed para conferir.

$.getJSON

O jQuery possui uma poderosa ferramenta para trabalharmos com JSON, é a função $.getJSON, que serve para carregar dados no formato JSON usando requisição HTTP GET. Na verdade, esta função é somente uma espécie de atalho para $.ajax() usando “json” no dataType, mas usá-la num contexto JSON fica bastante coerente.

Não há mistério algum para usar, ele segue a mesma “linha” do $.ajax(), como podemos encontrar neste exemplo disponibilizado no próprio site do jQuery:

$.getJSON('ajax/test.json', function(data) {
  var items = [];
 
  $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
  });
 
  $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

E, como nos mostra Gabriele Romanato, é possível verificar se o resultado da requisição é realmente um objeto JSON de maneira simples:

$.getJSON(url, function(data)) {
  if(typeof data !== 'object') {
    // Erro!
  }
});

Dessa maneira, é possível economizar bastante tempo ao procurar erros e a estrutura de código fica mais profissional e mais facilmente manutenível.

JSON e PHP

O PHP também possui algumas funções para se trabalhar com JSON. Vamos a um exemplo simples de como gerar PHP a partir de JSON:

$funcionarios = '
	{
	    "Marconildo":
	    {
	        "url": "http://www.marconildo.com.br/",
	        "idade": 34
	    },
	    "Joanorta":
	    {
	        "url": "http://www.joanorta.com.br/",
	        "idade": 22
	    },
	    "Estripafurgia":
	    {
	        "url": "http://www.estripafurgia.com.br/",
	        "idade": 47
	    }
	}
';
 
$funcionario = json_decode($funcionarios);
 
echo $funcionario->Marconildo . '<br />';
echo $funcionario->Marconildo->idade;

Bem simples, bem direto, dispensa explicações. Agora, se você preferir tratar o JSON como se fosse array, basta inserir um segundo parâmetro à função, dessa maneira:

$funcionario = json_decode($funcionarios, TRUE);

Ferramentas JSON

JSON é bastante simples e intuitivo para qualquer programador, mas, para quem está começando a mexer agora e/ou para os que precisam de algumas ferramentas para JSON, segue o link de alguns parser, validadores e ferramentas, em geral, para se trabalhar com JSON:

Conclusão sobre JSON

Uma das principais funcionalidades do JSON é o intercâmbio de dados entre aplicativos e linguagens diferentes. Sua sintaxe simples, sua leveza e objetividade, aliados ao suporte por dezenas de linguagens de progrmação o tornam uma excelente alternativa quando a necessidade é esta. O fato de milhares de webservices de qualidade usarem JSON deve ser um bom indicativo de que usá-lo é uma boa escolha.

Usando as ferramentas apresentas, é possível validar seu JSON, testá-lo, verificar se está produzindo uma hierarquia correta, enfim, aperfeiçoar e refinar o código para que atinja o máximo possível de desempenho. Ao se trabalhar com JSON, logo se percebe seu poder e simplicidade, o que agiliza bastante o processo de programação, ao mesmo tempo em que o formato não se torna um empecilho à produtividade; pelo contrário, a aprimora!

Por essas e outras a notação JavaScript Object Notation, mais conhecida como JSON, é altamente recomendada para desenvolvimento web!

11 interações em "JSON – JavaScript Object Notation"

  1. yogodoshi10/07/2011 

    Excelente post! Já coloquei no meu delicious pra indicar sempre que for necessário alguma explicação sobre JSON!

    Abraços!

  2. JuniorEdival23/07/2011 

    Olá, gostaria de uma ajuda, seu post foi muito interessante, me esclareceu algumas dúvidas sobre o json, mas estou com outras dúvidas.

    Fiz uma aplicação que me retorna uma string json no seguinte formato:

    [{"id_legislacao":1,"resumo":"yyyyyy","descricao":"xxxxxxxx","amparo_legal":"rrrrrrrrr","data_inicial_vigencia":"
    2000-01-01","data_revogacao":null,"ativo":"1"}]

    ela é recuperada por ajax e atribuída a uma variável result

    Só que não estou conseguindo acessar os itens do array no javascript, só consegui algum retorno quando utilizei JSON.stringify(result); , como eu faria para acessar desse retorno o item descricao por exemplo?

    Tentei varias funções mas não consegui.
    Acho pq ainda estou muito preso na sintaxe do PHP.

    Desde já agradeço.

  3. Ghabriel28/07/2011 

    Olá,
    é o seguinte. Primeiro, atribuímos o valor que você quer a uma variável:
    result = '[{"id_legislacao":1,"resumo":"yyyyyy","descricao":"xxxxxxxx","amparo_legal":"rrrrrrrrr","data_inicial_vigencia":"2000-01-01","data_revogacao":null,"ativo":"1"}]';

    Agora usamos o método parse para transformar isso no array (como explicado no tutorial):
    result = JSON.parse( result );

    Agora, para acessar o item "descricao" por exemplo, é só usar:
    result[0].descricao

    Por exemplo:
    desc = result[0].descricao

    É isso, abraços

  4. Tárcio Zemel02/08/2011 

    Opa, muito obrigado! Apareça, yogodoshi! ;-)

  5. Felipe Alves01/09/2011 

    Olá,

    Meu nome é Felipe Alves, sou um dos desenvolvedores Microsoft Brasil. O seu artigo é muito interessante e ajudará imensamente aos iniciantes.

    Estou me identificando nesta postagem, para acabar com o mito de que grandes profissionais leem pouco os blogs ou até que não damos valor aos mesmos.

    Os meus cumprimentos. O seu texto será adaptado para uma palestra interna em nosso escritório.

    Cordialmente,
    Felipe Alves – Microsoft Brasil

  6. Tárcio Zemel13/09/2011 

    Opa, obrigado, Felipe! Caso façam algum comunicado na web sobre o curso, agradeceria um link para o artigo!

    Abraços!

  7. Rodolfo Nogueira20/12/2011 

    Excelente artigo amigo. Me ajudou muito a informação sobre a referência de objetos no javascript. Está faltando algo sobre a utilização de objetos com a notação de ponto, que é bem bacana também. E quem sabe algo sobre classes de objetos em java, seria muito bem vindo!!

    Abraços amigo!
    Rodolfo Jorge Nemer Nogueira
    Curitiba / Paraná
    UFPR – Música

  8. Tárcio Zemel22/12/2011 

    Tem um exemplo que mostra os pontos. Quanto ao Java, aí, realmente, vou passar essa… ;-)

  9. Nei19/01/2012 

    Tenho este código, mais não sei como fazer a parte do aspx para processar os dados json e responder em json. Poderia me ajudar nessa parte?

    function EnviaForm(){
    var b = new Object();
    b.Nome = $(“#nome”).val();
    b.Email = $(“#email”).val();
    b.DataNascimento = $(“#data_nascimento”).val().substr(6,4)+”-”+$(“#data_nascimento”).val().substr(3,2)+”-”+$(“#data_nascimento”).val().substr(0,2);
    b.RG = $(“#rg”).val();
    b.Telefone = $(“#telefone”).val();
    b.Celular = $(“#celular”).val();
    b.Cidade = $(“#cidade”).val();
    b.UF = $(“#estado”).val();
    if ($(“#senha”).val()!=”"){
    b.Senha = $(“#senha”).val()
    }
    var a = new Object();
    a.cad = b;
    $.ajax({
    /* arquivo Json */
    url:”faclube.aspx/Cadastrar”,
    type:”POST”,
    contentType:”application/json; charset=utf-8″,
    dataType:”json”,
    data:JSON.stringify(a),
    success:function(c){
    if (c.d == “OK”){
    alert(“Cadastro efetuado com sucesso!nFaça o login para utilizar os serviços do site.”);
    $(“#nome”).val(“”);
    $(“#email”).val(“”);
    $(“#data_nascimento”).val(“”);
    $(“#rg”).val(“”);
    $(“#telefone”).val(“”);
    $(“#celular”).val(“”);
    $(“#senha”).val(“”);
    parent.$.colorbox.close()
    } else {
    alert(c.d)
    }
    },
    error:function(f,d,c){
    console.log(JSON.stringify(d.responseText))
    }
    })
    };

  10. fernando.20/01/2012 

    Uma coisa a ser observada é que no php o limite de elementos é de 127

  11. fernandof20/01/2012 

    Ou melhor dizendo 128 na versão, 5.2.3 outra coisa é que o charset deve ser UTF-8, caso contrário pode haver problemas.

    Comente!

    Paradoxalmente ao crescente individualismo, ninguém quer se sentir só, e cresce o desejo de estar conectado, pertencer a algum grupo, presencial ou virtual.

    Marcos Souza Aranha