JSON –Java Script Object Notation
Conceitos preliminares, sua estrutura e manipulação
Prof. Giuliano Prado [email protected]
Por que usa-lo?
• Quando você cria uma aplicação que irá se comunicar com outra aplicação, quer seja ela local ou remota, você esta trocando informações e neste caso um formato de dados e um protocolo de troca deve ser selecionado para que a comunicação seja feita com sucesso. Por sucesso entende-se que quem recebe a informação consegue tratá-la e entender o seu significado.
• Existem uma variedade de opções de protocolos
abertos padronizados, tais como SOAP, XML, etc., que
podem ser adotados e isso vai depender da finalidade
e dos requisitos da sua aplicação.
Por que usa-lo?
• Dessa forma, JSON é um protocolo leve para intercâmbio de dados e está baseado em um subconjunto da linguagem de programação JavaScript, sendo independente desta e de qualquer linguagem.
▫ JSON lembra XML :
▫ JSON é texto simples
▫ JSON é "auto-descritivo" (legível)
▫ JSON é hierárquico (valores dentro de valores)
▫ JSON pode ser analisado pelo JavaScript
▫ JSON os dados podem ser transportadas usando
AJAX
Por que usa-lo?
• mas é diferente da XML:
▫ Não utiliza a tag de fechamento
▫ É mais curto e simples
▫ É mais rápido de ler e escrever
▫ Pode ser analisado usando a função eval() do JavaScript
▫ Utiliza matrizes
▫ Não possui palavras reservadas
▫ Possui parser nas principais linguagens e navegadores
• Assim, JSON é menor do que XML, é mais rápido
e mais fácil de analisar.
Por que usa-lo?
• O motivo principal para usar JSON é que em aplicações web com AJAX, JSON é muito mais rápido e fácil de usar do que XML.
• A sintaxe JSON é um subconjunto da linguagem JavaScript (sendo independente desta repito).
• As principais regras de sintaxe JSON são:
▫ Dados JSON estão definidos aos pares no formato: nome : valor
▫ Os dados são separados por vírgulas ( , )
▫ As chaves { } contém objetos
▫ Os colchetes [ ] expressam matrizes/vetores
O JSON
• Duas estruturas básicas:
• Uma coleção de pares nome/valor
▫ Em outras linguagens: struct, record, objeto, tabela hash, etc.
▫ Ex.: { "pessoa" : "Bruno“ }
• Uma lista ordenada de valores
▫ Em outras linguagens: arrays, listas, sequência, vector, etc.
▫ Ex.: [ "Futebol", "Basquete", "Volei", "Natação" ]
O JSON
• Basicamente o JSON se baseia na notação NOME : VALOR, onde NOME pode ser o nome que você deseja usar para identificar um objeto e VALOR o valor deste objeto.
• A sintaxe JSON usa o par NOME : VALOR onde nome é definido entre aspas, seguido por dois
pontos, seguido por um valor:
• Ex:
"nome" : "Macoratti" ,
"font-size" : "14px;"
O JSON
• Estruturas JSON são universais
▫ Podem ser encontradas em praticamente todas as linguagens
▫ É o que permite o intercâmbio de informações
• O formato JSON é idêntico ao formato de objetos de Javascript
▫ Pode ser facilmente criado e manipulado em Javascript
▫ Não há necessidade de software extra para trabalhar
com JSON em Javascript
Estrutura de dados JSON
• Valor
• Objeto
• Array
• Número
• String
Valor
• Pode ser uma string, número, objeto, array ou as
palavras null, true e false
Objeto
• Conjunto de pares nome/valor
▫ Começa com {e termina com }
▫ Cada nome é seguido por “:” (dois pontos)
▫ Pares são separados por “,” (vírgula)
Objeto
• Exemplos usando variável para referenciar o objeto:
var pessoa = { "nome" : "Jose Carlos" , "sobrenome" :
"Macoratti" };
var produto = {"ProdutoID":1, "Descricao":"Notebook 14",
"ProdutoNumero":"PRD-5381"};
document.write(pessoa.nome); // retorna “Jose Carlos”
document.write(produto.Descricao); // retorna “Notebook 14”
Objeto
• Particularmente acredito que quebras de linhas
podem deixar o código mais legível:
Manipulando um Objeto
• Para acessar, então, um valor de nosso objeto JSON
podemos utilizar o código:
Manipulando um Objeto
• É possível acessar um objeto JSON usando um loop para facilitar o acesso às propriedades e seus
respectivos valores.
• Veja um exemplo de código.
Manipulando um Objeto
• É possível agrupar vários objetos no formato JSON, para isso deve-se criar objetos como já vimos
separados por vírgula dentro de colchetes.
• Veja o exemplo a seguir.
Manipulando um Objeto
• Sintaxe mais comum:
• Agora temos uma situação onde há um array (um
vetor) de objetos, pois temos dois objetos istintos
separados por vírgulas dentro de colchetes.
Array
• Coleção ordenada de valores
▫ Começa com [e termina com ]
▫ Valores são separados por “,” vírgula
Arrays
• Exemplo de manipulação 1:
var cores = [ "Azul" , "Branco", "Vermelho", "Amarelo" ];
• Podemos acessar os dados usando a seguinte sintaxe:
Arrays
• Exemplo de manipulação 2:
var escola = {
"alunos": [
{ "nome":"Jose Carlos" , "sobrenome":"Macoratti" }, { "nome":"Ana" , "sobrenome":"Lima" },
{ "nome":"Pedro" , "sobrenome":"Ramos" } ]
}
• Neste exemplo temos um objeto alunos definido como um array contendo 3 objetos . Cada objeto possui nome e
sobrenome.
Arrays
• A primeira entrada no objeto array pode ser acessada da seguinte forma:
alunos[0].nome; => retona Jose Carlos
• Para alterar um valor usamos a seguinte sintaxe:
alunos[0].nome = "Teste";
Array de Objetos
• No caso anterior:
Usando JSON no HTML
• Como faríamos para colocar as informações de nome, idade e carro no corpo da página HTML ao invés de apenas nos “alerts”?
• Assumindo que foi importado o jQuery em
uma página, que foi criado o bloco de
detecção de estado do DOM e os eventos em
um botão, vejamos um exemplo de código.
Usando JSON no HTML
JSON Aninhado
• É possível declarar um objeto JSON dentro
de um objeto JSON, isto é, é possível declarar como o valor de uma propriedade JSON um outro objeto JSON.
• Exemplo:
Objeto mais complexo
Descrevendo o objeto
• O exemplo mostra a representação JSON de um objeto que descreve uma pessoa.
• O objeto tem campos string para o nome e sobrenome, um campo número para a idade, contém um objeto que representa o endereço da pessoa, e contém uma lista (uma matriz) de objetos para os números de telefone.
• No exemplo temos a variável agenda contendo os
dados JSON
Manipulando o objeto
• Podemos usar a função eval( ) para criar o objeto contato JavaScript da seguinte forma:
var contato = eval("(" + agenda + ")");
• Obs: a variável agenda precisa estar envolvida em
parênteses para evitar ambiguidade com a sintaxe
JavaScript.
A função eval()
• A função JavaScript eval() pode ser usada para converter um texto JSON em um texto JavaScript pois a função eval() usa o compilador JavaScript que irá analisar o texto JSON e um produzir um objeto JavaScript.
• Para evitar um erro de sintaxe o texto precisa ser
envolvido por parênteses.
Acessando o objeto através de eval()
var contato = eval("(" + agenda + ")");
document.write(contato.nome);
// retorna “Jose Carlos”
document.write(contato.endereco.cidade);
// retorna “Santos”
document.write(contato.telefone[1].tipo);
// retorna “celular”
Outro exemplo, com array
eval () x parser
• Como a função eval() pode compilar e executar qualquer JavaScript isso representa um potencial problema de segurança.
• Por isso é mais seguro usar um parser JSON
para converter um texto JSON para um objeto
JavaScript.
eval () x parser
• Um parser ou analisador JSON irá reconhecer apenas o texto JSON e não vai compilar os scripts.Em navegadores que oferecem suporte nativo a JSON, os parsers JSON também são mais rápidos.
• O apoio ao JSON nativo está incluído nos navegadores mais novos e no mais novo padrão ECMAScript (JavaScript).
▫ Atualmente navegadores como o Firefox e Internet
Explorer incluem características especiais para analisar
(parsers) JSON, sendo esse suporte ao navegador nativo
mais eficiente e seguro do que o usar o recurso eval() do
JavaScript.
Regras para leitura de um JSON
• A regra básica é: antes de sair escrevendo código, pare e olhe para o JSON.
▫ Veja se ele é um objeto ou array (que é o que a grande maioria das APIs REST retorna hoje em dia): se começa com { é um objeto, se começa com [ é um array.
▫ Depois veja o que tem dentro desse objeto ou array. Se
for um array, procure pelas vírgulas que separam os
elementos e verifique os seus tipos, e preocupe-se com a
ordem em que eles estão, para saber como obter cada
um. Se for um objeto, veja quais são as chaves e os
respectivos valores.
Regras para leitura de um JSON
• Se o JSON é muito grande e/ou com muitas estruturas aninhadas (objetos dentro de arrays, dentro outros arrays, dentro de outros objetos, etc), formatá-lo ajuda a visualizar a sua estrutura.
• Há vários sites como esse (https://jsonlint.com/),
que validam e formatam um JSON. Além disso, as
linguagens/APIs que trabalham com JSON
geralmente possuem uma opção para formatá-lo
(veremos alguns exemplos mais abaixo).
Regras para leitura de um JSON
• Outro ponto importante é verificar se o JSON que você está tentando ler é de fato um JSON válido.
Um exemplo clássico é:
Válido ou não???
Regras para leitura de um JSON
• Inicialmente você pode pensar que, como começa com {, então é um objeto. Mas repare bem: o primeiro objeto (o que tem "nome": "Fulano") termina na quarta linha (onde há o }), e logo em seguida há uma vírgula.
Logo depois, temos outro objeto (o que tem "nome":
"Ciclano").
• Este não é um JSON válido.
• Há dois objetos “soltos”, separados por vírgula. Cada um deles
individualmente é um JSON válido,
mas ter ambos separados por vírgula não é.
Regras para leitura de um JSON
• O que poderia deixar esta estrutura válida é colocá-la entre [ e ]:
• Pois agora ela se tornou um array com dois objetos. Mas da forma que estava (sem o [ e ]), a estrutura é inválida, e muitas APIs dão erro ao tentar processá-la (ou ignoram o segundo objeto, varia conforme a implementação).