Neste mês
irei abordar conceitos básicos sobre um assunto muito utilizado na atualidade,
o JSON. Podemos definir JSON (Javascript
Object Notation) como um modelo para armazenamento e transmissão de
informações no formato texto, independente de qualquer linguagem de
programação.
Este formato
é nativo do Javascript e é de uso extremamente fácil. Podemos utilizar este
formato em diversas plataformas de desenvolvimento, sendo que o mais usual
seria por aplicações Web, devido a sua capacidade de estruturar informações de
uma forma bem mais compacta do que o modelo XML, tornando mais rápido o
“parsing” (processo de analisar uma sequência de
entrada dessas
informações) dessas informações.
É importante lembrarmos que existem uma variedade
de opções de protocolos abertos padronizados, tais como SOAP, XML, entre outros, que podem ser adotados e
isso vai depender da finalidade e dos requisitos da sua aplicação.
Principais
características
Podemos
destacar algumas características marcantes como:
·
Auto-Descritivo;
·
Simples e mais rápido;
·
Hieráquico (valores dentro de valores);
·
Pode ser Analisado pelo Javascript;
·
Os dados podem ser transportados usando o AJAX;
·
Não utiliza a tag de fechamento;
·
Utiliza matrizes (diferente do XML);
·
Não possui palavras reservadas;
·
Possui “parser” nas principais linguagens e
navegadores.
Antes
de iniciarmos o uso do JSON, gostaria de demonstrar algumas diferenças entre o
formato XML, o qual já estamos mais habituados.
Ver
Tabela 01.
Uma comparação entre
JSON e XML
Características
|
JSON
|
XML
|
Tipos de Dados
|
Fornece
tipos de dados escalares e a capacidade de expressar dados estruturados
através de matrizes e objetos.
|
Não fornece qualquer noção
de tipos de dados. É preciso contar com Schema XML para adicionar informações
de tipo.
|
Suporte para Matrizes
|
Possui
suporte nativo a matrizes.
|
Matrizes têm de ser expressos por
convenções , por exemplo através da utilização de um elemento de espaço
reservado exterior que modelos o conteúdo matrizes como elementos internos.
|
Suporte para Objetos
|
Possui
suporte nativo aos objetos.
|
Objetos devem ser expressos muitas vezes
através de um uso misto de atributos e elementos.
|
Suporte a elementros Nulos
|
Nativamente
reconhece o valor nulo.
|
Requer o uso de “xsi : nil” em elementos
em um documento de instância XML além de uma importação do namespace
correspondente.
|
Comentários
|
Não suporta
este tipo de recurso.
|
O suporte nativo é geralmente
disponíveis através de APIs .
|
Namespaces
|
No conceito de namespaces as colisões de
nomenclatura geralmente são evitados pelo aninhamento objetos.
|
Suporta namespaces , o que elimina o
risco de colisões de nomes ao combinar documentos. Namespaces também permitem
padrões baseados em XML existentes para ser estendido com segurança.
|
Formatação
|
Fornece um mapeamento muito mais direto
para dados de aplicativo.
|
Requer um
esforço maior para decidir como mapear tipos de aplicativos para elementos e
atributos XML.
|
Tamanho
|
A sintaxe é muito concisa e produz texto
formatado , onde a maioria do espaço é utilizada pelos dados representados .
|
Documentos tendem a ser longos.
|
Análise (parsing) no Javascript
|
Podemos usar a função “eval” do
JavaScript.
|
Requer uma
implementação “DOM” “XML” e código de aplicação adicional para mapear o texto
de volta para objetos JavaScript.
|
Curva de Aprendizado
|
Tecnologia
muito simples que já é familiar aos desenvolvedores com experiência em
JavaScript ou outras linguagens de programação dinâmica.
|
Geralmente tende a exigir a utilização
de várias tecnologias como por exemplo: XPath , XML Schema , XSLT, XML
Namespaces , DOM , e assim por diante.
|
Sintaxe
Podemos definir algumas regras de sintaxe, como: os dados
são definidos aos pares no formato “nome: valor”, são separados por vírgulas,
as chaves { } contém objetos e os colchetes [ ] expressam matrizes e vetores.
Exemplo:
“razaosocial”: “the club”
1) Valores do tipo texto
Para valores do tipo texto devemos inserir a aspas duplas (
“ “ ).
Exemplo:
Exemplo:
“razaosocial”: “the club”
2) Valor Real
Para este tipo de dados não utilizamos aspas.
Exemplo:
“distancia”: 5.85
“distancia”: 5.85
3) Valor Negativo
Para este tipo de dados não utilizamos aspas.
Exemplo:
“grau”: -90
“grau”: -90
4) Valor booleano
Para este tipo de dados não utilizamos aspas.
Exemplo:
“liberado”: false
“liberado”: false
A partir dos tipos básicos, é possível construir tipos
complexos: array e objeto. Os arrays são delimitados por colchetes [ ], com seus elementos separados entre
vírgulas.
5) Valor Array de Strings
Os valores são delimitados por colchetes, vírgula e aspas
duplas.
Exemplo:
[“SIM”, “NÃO”, “TALVEZ”, “QUEM SABE”]
[“SIM”, “NÃO”, “TALVEZ”, “QUEM SABE”]
6) Valores de Array de Inteiros
Os valores são delimitados por colchetes e vírgula.
Exemplo:
[1, 10, 20, 30, 40, 50]
[1, 10, 20, 30, 40, 50]
7) Valores de Matriz de Inteiros
Os valores são delimitados por colchetes e vírgula.
Exemplo:
[
[1,2], [10. 20], [20,30]
]
[
[1,2], [10. 20], [20,30]
]
Já os objetos são especificados entre chaves e podem ser
compostos por múltiplos pares nome/valor, por arrays e também por outros
objetos. Desta forma, um objeto JSON pode representar, virtualmente, qualquer
tipo de informação. Podemos conferir nos itens 8 e 9.
8) Valores de Objetos
Exemplo:
{
“nome”: “Thiago C. Montebugnoli”,
“documento”: “333.222.555-99”,
“sexo”: “masculino”,
“tipopessoa”: [“juridica”, “fisica”]
}
“nome”: “Thiago C. Montebugnoli”,
“documento”: “333.222.555-99”,
“sexo”: “masculino”,
“tipopessoa”: [“juridica”, “fisica”]
}
9) Valores de Array de Objetos
Exemplo:
[
{
“nome”: “Thiago C. Montebugnoli”,
“documento”: “333.222.555-99”,
“sexo”: “masculino”,
“ativo”: true,
“tipopessoa”: [“juridica”, “fisica”]
},
{
“nome”: “Marcos Cesar”,
“documento”: “333.888.666-99”,
“sexo”: “masculino”,
“ativo”: false,
“tipopessoa”: [“juridica”, “fisica”]
}
“nome”: “Thiago C. Montebugnoli”,
“documento”: “333.222.555-99”,
“sexo”: “masculino”,
“ativo”: true,
“tipopessoa”: [“juridica”, “fisica”]
},
{
“nome”: “Marcos Cesar”,
“documento”: “333.888.666-99”,
“sexo”: “masculino”,
“ativo”: false,
“tipopessoa”: [“juridica”, “fisica”]
}
]
10) Valor nulo
Para referenciar valores nulos basta utilizar a palavra
“null”.
Exemplo:
“atualizado”: null
“atualizado”: null
Exemplo prático - Criando Objetos a partir do JSON
A partir deste momento irei demonstrar na prática um exemplo
simples envolvendo JSON junto com páginas simples em HTML. Para isto abra o
Bloco de Notas ou outro aplicativo similar para darmos procedimento ao nosso
exemplo.
<!DOCTYPE html>
<html>
<body>
<h2>Criando Objetos a partir do JSON</h2>
<p id="theclub"></p>
<script>
var text = '{"funcionarios":['
+'{"nome":"Thiago","sobrenome":"Montebugnoli" },' +'{"nome":"Marcos","sobrenome":"Cesar" },' +'{"nome":"Bruno","sobrenome":"da Silva" }]}';
obj = JSON.parse(text);
document.getElementById("theclub").innerHTML = obj.funcionarios[1].nome + " " + obj.funcionarios[1].sobrenome;
</script>
</body>
</html>
Listagem 01.
Como foi descrito anteriormente, foi criado um array de objetos, no caso de funcionários, contendo os pares valores de Nome e Sobrenome. Armazenaremos em uma variável do tipo “var” dentro da tag “script”. A função Javascript “JSON.parse” está sendo utilizada para converter um texto JSON em um objeto Javascript. O método “getElementById.innerHTML” irá escrever no navegador os dados contidos na posição “1” do array de objetos supracitado. Ver Listagem 01 para maiores detalhes.Podemos conferir o resultado deste código na Imagem 01.
<html>
<body>
<h2>Criando Objetos a partir do JSON</h2>
<p id="theclub"></p>
<script>
var text = '{"funcionarios":['
+'{"nome":"Thiago","sobrenome":"Montebugnoli" },' +'{"nome":"Marcos","sobrenome":"Cesar" },' +'{"nome":"Bruno","sobrenome":"da Silva" }]}';
obj = JSON.parse(text);
document.getElementById("theclub").innerHTML = obj.funcionarios[1].nome + " " + obj.funcionarios[1].sobrenome;
</script>
</body>
</html>
Listagem 01.
Como foi descrito anteriormente, foi criado um array de objetos, no caso de funcionários, contendo os pares valores de Nome e Sobrenome. Armazenaremos em uma variável do tipo “var” dentro da tag “script”. A função Javascript “JSON.parse” está sendo utilizada para converter um texto JSON em um objeto Javascript. O método “getElementById.innerHTML” irá escrever no navegador os dados contidos na posição “1” do array de objetos supracitado. Ver Listagem 01 para maiores detalhes.Podemos conferir o resultado deste código na Imagem 01.
![]() |
Figura 01: Criando Objetos a partir do JSON. |
Conclusões
Caro leitor, a minha ideia neste artigo foi de apontar os
conceitos iniciais deste modelo para armazenamento e transmissão de informações
no formato texto. Foram demonstradas algumas diferenças relevantes entre JSON e
XML e logo em seguida procurei detalhar o máximo possível de conceitos envolvendo
exemplos simples e intuitivos.
O JSON é considerado um importante e indispensável protocolo
de troca de dados, tendo algumas empresas que o adotam, como por exemplo:
Google e Yahoo, as quais necessitam transmitir grandes volumes de dados entre aplicações.
Vou Ficando por aqui, um forte abraço e até o mês que vem!
Referências
https://msdn.microsoft.com/en-us/library/bb299886.aspx
Nenhum comentário:
Postar um comentário