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
Linguagens
ActionScript
Perl
C / C++
Objective-C
C#
Objective CAML
Cold Fusion
PHP
Delphi
Python
E
Rebol
Erlang
Ruby
Java
Scheme
Lisp
Squeak
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
Valores
value
string
number
object
array
true
false
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
String
string
Any UNICODE character except
" or \ or control character
"
\
"
\
/
b
f
n
r
t
u
quotation mark
reverse solidus
solidus
backspace
formfeed
newline
carriage return
horizontal tab
4 hexadecimal digits
"
Numbers
Integer
Real
Scientific
No octal or hex
No NaN or Infinity
Use null instead
Number
number
0
-
.
digit
1 - 9
digit
e
digit
E
+
digit
-
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
object
{
string
:
,
value
}
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
array
[
value
,
]
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);
Azul = definição do objeto.
alert(meuObj.Retorno.Atributo2);
Indica que Retorno é um objeto
complexo
Preto = Atributo
Laranja = Valor
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.
Forma de uso
Criação de estrutura complexa através de strings
var meuObj = eval('({' +
"Retorno:[{'Atributo1':'Valor1','Atributo2':'Valor2'},{'Atributo1':'V
alor3', '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
Download

JSON