420 likes | 547 Views
Tópicos avançados em internet B. Carlos Oberdan Rolim Ciência da Computação. JSON (JavaScript Object Notation). O que é JSON. JSON é um formato para troca de informações Usado por aplicações que fazem uso de Ajax Aspectos mais importantes na troca de dados: Simplicidade Extensabilidade
E N D
Tópicos avançados em internet B Carlos Oberdan Rolim Ciência da Computação
JSON (JavaScript Object Notation)
O que é JSON • JSON é um formato para troca de informações • Usado por aplicações que fazem uso de Ajax • Aspectos mais importantes na troca de dados: • Simplicidade • Extensabilidade • Interoperabilidade • Leitura humana
O que é JSON • Subconjunto da ECMA-262 Third Edition. • Independente de linguagem • Baseado em texto • Formato leve • Simples de parsear
O que é JSON • É uma notação aplicada em JavaScript para que seja possível a definição de objetos (estruturas) complexas • Sua forma de aplicação assemelha-se a um objeto abstraído do mundo real o qual trabalhamos em POO • Fornece a capacidade de atribuir métodos de execução (funções) que estarão diretamente ligadas ao objeto criado • prototype
O que é JSON • Bastante utilizado para auxiliar a execução de chamadas AJAX onde o retorno obtido da execução no servidor obedece aos padrões de criação de objetos JSON para que os dados retornados possam ser lidos em JavaScript. • Desta forma, a programação no servidor gera Strings que serão interpretadas no código JavaScript através da função eval() ao qual dará a origem a um objeto em JavaScript
O que NÃO é • Não é um formato de documento • Não é uma linguagem de marcação • Não é um formato de serialização: • Não possui estruturas ciclicas ou recorrentes • Não possui estruturas invisíveis • Não possui funções
Histórico • 1999 ECMAScript Third Edition (European Computer Manufacturers Association) • Linguagem de programação baseada em scripts • Base de criação do JavaScript e ActionScript • 2001 State Software, Inc. • 2002 JSON.org • 2005 Ajax • 2006 RFC 4627
Linguagens • Chinese • English • French • German • Italian • Japanese • Korean
ActionScript C / C++ C# Cold Fusion Delphi E Erlang Java Lisp Perl Objective-C Objective CAML PHP Python Rebol Ruby Scheme Squeak Linguagens
Como funciona • JSON é um subset de JavaScript. • Pode ser parseado através de um parser JavaScript • Pode representar desde objetos simples até objetos complexos • Valores suportados • String • Number • Boolean • Objetos • Arrays • Null
Valores • Strings • Numbers • Booleans • Objects • Arrays • null
Strings • Sequencia de 0 ou mais caracteres Unicode • No • Um caracter é representado como uma string de tamanho 1 • Envolvido por aspas duplas “ • Barra de escape
Numbers • Integer • Real • Scientific • No octal or hex • No NaN or Infinity • Use null instead
Booleans • true • false
null • Um valor que não é nada
Object • São conjuntos não ordenados de pares formados por chave/valor (key/value) • Objetos são envolvidos por { } • , separa pares key/value • : separa keys e values • Keys são strings • Values são valores JSON • struct, record, hashtable, object
Object {"name":"Jack B. Nimble","at large": true,"grade":"A","level":3, "format":{"type":"rect","width":1920, "height":1080,"interlace":false, "framerate":24}}
Object { "name": "Jack B. Nimble", "at large": true, "grade": "A", "format":{ "type": "rect", "width": 1920, "height": 1080, "interlace": false, "framerate": 24 } }
Array • São sequencias ordenadas de valores • São envolvidas por [] • , separa valores • JSON não fala nada sobre indices. • Uma implementação pode iniciar em 0 ou 1.
Array ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] [ [0, -1, 0], [1, 0, 0], [0, 0, 1] ]
Arrays vs Objects • Use objetos quando as chaves são strings arbitrarias • Use arrays quando as chaves são inteiros sequenciais • Não confundir com o termo Array Associativo
JSON x XML • JSON é muito usado em AJAX. O The X do AJAX vêm de XML { "fullname": "Swati Kumar", "org": "Columbia", } • Em XML <?xml version='1.0‘ encoding='UTF-8'?> <element> <fullname>Swati Kumar</fullname> <org>Columbia</org> </element>
JSON x XML • JSON no lado cliente var name = eval('(' + req.responseText + ')').fullname.value; • Para acessar um elemento composto eval('(' + req.responseText + ')').xyz.abc.value; • Pode-se perceber que qualquer nível de profundidade é acessado facilmente
JSON x XML • XML no lado cliente var root = req.responseXML; var name = root.getElementsByTagName(‘fullname’); • Para acessar um elemento composto root.getElementsByTagName(‘xyz’)[0].firstChild • Para acessar níveis mais profundos existe mais overhead • Reduzida extensabilidade em XML
Aspectos de segurança • Same Origin Policy - JavaScript pode acessar o conteúdo de uma página web somente se a página e o JavaScript originam do mesmo domínio • JavaScripts maléficos podem ler informações sensíveis de outros sites usando as credenciais do cliente e enviar esses dados de volta ao atacante • Embora o JavaScript maléfico não possa manipular diretamente o conteúdo, ele pode visualizar a execução e armazenar os valores retornados • Esse problema foi agravado com JSON já que arrays JSON são por si próprias objetos JavaScript e qualquer script maléfico pode ver esses objetos diretamente
Onde JSON pode ser usado • Devido ao seu formato leve pode ser usado para transferir quantidade média de dados • Pode ser renderizado em HTML • Aplicações AJAX • Usar em aplicações baseadas em browser
Forma de uso • Devido ao conceito de Orientação a Objetos aplicado ao JavaScript não é incomum que ao JSON sejam atribuídos atributos privados e públicos. • Estes atributos terão comportamentos diferenciados dentro do objeto obedecendo às regras de modificadores utilizadas em Orientação a Objetos • Atributos privados • acessados apenas por códigos executados dentro dos métodos pertencentes ao objeto • Atributos públicos • estarão disponíveis para acesso externo a quem instancia este objeto
Forma de uso • Existem duas formas de gerar objetos JSON. • 1ª - Trabalhando com construção do objeto a partir de funções as quais acabam por fazer papel de construtor do objeto JavaScript. • 2ª - Trabalhando com interpretação de Strings contendo os padrões de notação JSON.
Forma de uso • Primeira forma • Criação de JSON a partir de funções function DefinicaoObjeto() { this.Atributo1 = "Primeiro Atributo"; //atributo público var Atributo2 = "Segundo Atributo"; //atributo privado this.ValorConcatenado = this.Atributo1 + " - " + Atributo2; //atributo publico; } var meuObj = new DefinicaoObjeto(); // momento de criação do JSON
Forma de uso • Atributo1 • “this” indica que pertencerá ao objeto e não ao contexto local • Atributo2 • Contexto local não estando acessível a quem instanciar o objeto • Criação do objeto JSON • Para acessar seus atributos públicos alert(meuObj.Atributo1); alert(meuObj.ValorConcatenado);
Forma de uso • Segunda forma • Criação de JSON a partir de strings • Devem seguir alguns padrões de notação para que o Compilador JavaScript consiga interpretá-las e criar uma estrutura complexa, ou seja, criar o objeto • A diferença entre criação do JSON a partir de métodos e a criação do JSON a partir de Strings está pura e claramente em sua origem de existência, pois a partir do momento que o objeto foi criado, não existem mais diferenças e sua utilização é igual para ambos os casos
Forma de uso var meuObj = eval('({' + "Retorno:{'Atributo1':'Valor1','Atributo2':'Valor2'}" + '})'); alert(meuObj.Retorno.Atributo1); alert(meuObj.Retorno.Atributo2); • O método javaScript chamado “eval()” serve para que o Compliador JavaScript resolva a instrução da String JSON e crie o objeto. • A Composição da String é fragmentada em 3 partes. • 1ª - Definir o objeto. • 2ª - Definir o atributo. • 3ª - Definir o valor. Azul = definição do objeto. Indica que Retorno é um objeto complexo Preto = Atributo Laranja = Valor
Forma de uso • Criação de estrutura complexa através de strings var meuObj = eval('({' + "Retorno:[{'Atributo1':'Valor1','Atributo2':'Valor2'},{'Atributo1':'Valor3', 'Atributo2':'Valor4'}]" + '})'); alert(meuObj.Retorno[0].Atributo1); alert(meuObj.Retorno[1].Atributo2); • Para definição de um array usar [ ] • Separação de grupos de atributos que se encontram dentro de “{ }” por vírgulas “,“ ficando desta forma: “{},{}” • Acesso através de meuObj.Retorno[0].Atributo1