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:
- Sintaxe simples, de fácil aprendizado e implementação;
- Tamanho do arquivo bem menor em relação a outras “linguagens intermediárias”, tais como XML;
- Facilidade de desenvolvimento e alto desempenho nas aplicações que o utilizam.
Estruturas JSON
É possível ver alguns diagramas das estruturas no próprio site oficial do JSON; basicamente, é o seguinte:

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:
- Json Parser Online
- JSONLint – The JSON Validator
- Online JSON Viewer
- Convert JSON Strings to a Friendly Readable Format
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!
Excelente post! Já coloquei no meu delicious pra indicar sempre que for necessário alguma explicação sobre JSON!
Abraços!
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.
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
Opa, muito obrigado! Apareça, yogodoshi! ;-)
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
Opa, obrigado, Felipe! Caso façam algum comunicado na web sobre o curso, agradeceria um link para o artigo!
Abraços!
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
Tem um exemplo que mostra os pontos. Quanto ao Java, aí, realmente, vou passar essa… ;-)
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))
}
})
};
fernando.20/01/2012
Uma coisa a ser observada é que no php o limite de elementos é de 127
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.