JSON (JavaScript Object Notation) é um formato leve usado para troca de dados. É baseado em um subconjunto da linguagem JavaScript (a maneira como os objetos são criados em JavaScript). Conforme declarado no MDN , alguns JavaScript não são JSON e alguns JSON não são JavaScript.
Um exemplo de onde isso é usado são as respostas dos serviços da web. Antigamente, os serviços da Web usavam XML como formato de dados primário para a transmissão de dados, mas desde que o JSON apareceu ( o formato JSON é especificado na RFC 4627 por Douglas Crockford ), ele era o formato preferido, porque é muito mais leve
Você pode encontrar muito mais informações no site oficial do JSON .
JSON é construído em duas estruturas:
- Uma coleção de pares nome / valor. Em vários idiomas, isso é realizado como um objeto, registro, estrutura, dicionário, tabela de hash, lista de chaves ou matriz associativa.
- Uma lista ordenada de valores. Na maioria dos idiomas, isso é realizado como uma matriz, vetor, lista ou sequência.
Estrutura JSON
Aqui está um exemplo de dados JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON em JavaScript
JSON (em Javascript) é uma string!
As pessoas geralmente assumem que todos os objetos Javascript são JSON e que JSON é um objeto Javascript. Isto está incorreto.
Em Javascript nãovar x = {x:y}
é JSON , este é um objeto Javascript . Os dois não são a mesma coisa. O equivalente JSON (representado na linguagem Javascript) seria var x = '{"x":"y"}'
. x
é um objeto do tipo string e não um objeto por si só. Para transformar isso em um objeto Javascript pleno direito você deve primeiro analisá-lo, var x = JSON.parse('{"x":"y"}');
, x
agora é um objeto, mas isso não é JSON mais.
Consulte Objeto Javascript Vs JSON
Ao trabalhar com JSON e JavaScript, você pode tentar usar a eval
função para avaliar o resultado retornado no retorno de chamada, mas isso não é sugerido, pois existem dois caracteres (U + 2028 e U + 2029) válidos no JSON, mas não no JavaScript (leia mais sobre isso aqui ).
Portanto, é preciso sempre tentar usar o script de Crockford que verifica um JSON válido antes de avaliá-lo. O link para a explicação do script é encontrado aqui e aqui está um link direto para o arquivo js. Atualmente, todos os principais navegadores têm sua própria implementação para isso.
Exemplo de como usar o analisador JSON (com o json do snippet de código acima):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
O analisador JSON também oferece outro método muito útil stringify
,. Este método aceita um objeto JavaScript como parâmetro e retorna uma sequência com o formato JSON. Isso é útil para quando você deseja enviar dados de volta ao servidor:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Os dois métodos acima ( parse
e stringify
) também usam um segundo parâmetro, que é uma função que será chamada para cada chave e valor em todos os níveis do resultado final, e cada valor será substituído pelo resultado da sua função inserida. (Mais sobre isso aqui )
Btw, para todos vocês que pensam que o JSON é apenas para JavaScript, confira este post que explica e confirma o contrário.
Referências