quinta-feira, 11 de abril de 2019

JSON - Conceitos Básicos


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.
Tabela 01: Comparação entre JSON e XML.

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:
“razaosocial”: “the club”

2)      Valor Real
Para este tipo de dados não utilizamos aspas.
Exemplo:

distancia”: 5.85
3)      Valor Negativo
Para este tipo de dados não utilizamos aspas.
Exemplo:

“grau”: -90
4)      Valor booleano
Para este tipo de dados não utilizamos aspas.
Exemplo:

“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”]
6)      Valores de Array de Inteiros
Os valores são delimitados por colchetes e vírgula.
Exemplo:

[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]
]
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”]        
}
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”]      
  }
]

10)   Valor nulo
Para referenciar valores nulos basta utilizar a palavra “null”.
Exemplo:

“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.

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