JSON (JavaScript Object Notation) é uma estrutura de dados em
javascript.
Apesar de começarem a falar muito disso recentemente, JSON não é uma
tecnologia nova, faz parte do javascript puro e não precisa de nenhum
script pra trabalhar.
O JSON pode substituír o XML, e faz isso muito bem na hora de
trabalhar com respostas em AJAX.
A estrutura de dados fica mais simples de trabalhar e o tempo de
execução de um script lendo dados em JSON é dezenas de vezes mais
rápido do que ler um conteúdo XML.
As principais linguagens de programação server side tem suporte pra escrever dados em JSON.
Veja o exemplo da estrutura de dados abaixo
var dados = {
"aluno" : [
{"nome":"João", "provas": [ { "nota":8 }, {"nota":6}, {"nota":10 }, {"nota":2 } ] },
{"nome":"Maria", "provas": [ { "nota":3}, {"nota":5}, {"nota":8 }, {"nota":1 } ] },
{"nome":"Pedro", "provas": [ { "nota":7}, {"nota":6}, {"nota":6 }, {"nota":8 } ] },
]
};
Veja como seria a mesma estrutura de dados em XML:
<?xml version='1.0' encoding='utf-8'?>
<aluno>
<nome>Danilo</nome>
<provas>
<prova nota=8/>
<prova nota=6/>
<prova nota=10/>
<prova nota=2/>
</provas>
</aluno>
<aluno>
<nome>Belinha</nome>
<provas>
<prova nota=3/>
<prova nota=5/>
<prova nota=8/>
<prova nota=1/>
</provas>
</aluno>
<aluno>
<nome>Carla</nome>
<provas>
<prova nota=7/>
<prova nota=6/>
<prova nota=6/>
<prova nota=8/>
</provas>
</aluno>
Apesar do xml ter mais chaves e colchetes, fica mais facil de ler os dados:
var jsonData = eval(dados);
E pronto, bem mais simples que xml!
Depois para obter os dados funciona assim:
document.write(jsonData.aluno[0].nome);
// Escreve o nome do primeiro aluno: "Danilo";
document.write(jsonData.aluno[1].provas.nota[3]);
// Escreve a nota da última prova da Belinha ;
document.write(jsonData.aluno[2].provas.nota[0]);
// Escreve a nota da primeira prova da Carla ;
for(i=0;i<jsonData.aluno.length;i++){
document.write(jsonData.aluno[i].nome);
}
// escreve o nome de todos os alunos
for(i=0;i<jsonData.aluno.length;i++){
document.write(jsonData.aluno[i].nome);
for(j=0;j<jsonData.aluno[i].provas.length;j++){
document.write(jsonData.aluno[i].provas[j].nota);
}
}
// escreve o nome e todas as notas de todos os alunos