# JSON

Em computação, JSON (pronúncia ['dʒejzən], J-son em inglês), um acrônimo de JavaScript Object Notation, é um formato compacto, de padrão aberto independente, de troca de dados simples e rápida (parsing) entre sistemas, especificado por Douglas Crockford em 2000, que utiliza texto legível a humanos, no formato atributo-valor (natureza auto-descritiva). Isto é, um modelo de transmissão de informações no formato texto, muito usado em web services que usa transferência de estado representacional (REST) e aplicações AJAX, substituindo o uso do XML. O padrão foi especificado em 2000 e, definido em 2013 nos dois padrões concorrentes, RFC7159 e ECMA-404. Em 2017 a RFC8259 substituiu a 7159 e a ECMA-404 foi revisada.
O JSON é um formato de troca de dados entre sistemas independente de linguagem de programação derivado do JavaScript. Mas a partir de 2017 muitas linguagens de programação incluiram código para gerar, analisar sintaticamente dados em formato JSON e também converter para objetos da linguagem. O tipo de mídia da Internet oficial (MIME) para o JSON é application/jsone nomes de arquivos JSON usam a extensão .json.
O RFC 7493 define um perfil restrito de JSON, conhecido como I-JSON (abreviação de "Internet JSON"), que visa superar alguns problemas de interoperabilidade com o JSON. Cada documento I-JSON é um documento JSON válido, mas o contrário não é necessariamente verdade. Apesar de derivado do Javascript, alguns códigos JSON não são considerados Javascript.

## Descrição

A simplicidade de JSON ajudou a popularizar seu uso, especialmente como uma alternativa para XML em AJAX. Uma das vantagens sobre o XML como um formato para intercâmbio de dados, é a facilidade de escrever um analisador JSON, mesmo em JavaScript, simplesmente usando a função eval. Devido a presença deste recurso de JavaScript em todos os navegadores web atuais.
Na prática, os argumentos de desenvolvimento e desempenho do analisador são raramente revelados, devido ao sistema de segurança no uso do eval somado a crescente integração de processamento XML nos navegadores web. Por esta razão JSON é tipicamente usado em ambientes onde o tamanho do fluxo de dados entre o cliente e o servidor é extremamente importante, onde a fonte dos dados pode ser explicitamente confiável (favorecendo seu uso por Google, Yahoo, etc., servindo milhões de usuários) e onde a perda dos recursos de processamento XSLT no lado cliente para manipulação de dados ou geração da interface, não é uma consideração.
Enquanto JSON é frequentemente posicionado "em confronto" com XML, não é incomum ver tanto JSON como XML sendo usados na mesma aplicação. Por exemplo, uma aplicação no lado cliente a qual integra dados do Google Maps com dados atmosféricos através de SOAP, requer suporte para ambos formatos de dados.
Existe um crescente suporte para JSON através do uso de pequenos pacotes de terceiros. A lista de linguagens suportadas incluem ActionScript, C/C++, C#, ColdFusion, Java (biblioteca org.json), JavaScript, OCaml, Perl, PHP, ASP 3.0, Python, Rebol, Ruby, Lua, Progress 4GL, Go Lang, Android.
Em dezembro de 2005, com a característica de rápido transmissão de dados, Yahoo! começou a suportar JSON como uma opção para alguns de seus serviços Web, assim como o Google (biblioteca com.google.gson.Gson).

## JSON versus XML

O JSON pode ser considerado concorrente da XML na área de troca de informações. Vejamos algumas das principais semelhanças e diferenças entre os modelos de marcação das informações:
Semelhanças:
* Representam informações no formato texto.;
* Possuem natureza auto-descritiva;
* Ambos são capazes de representar informação complexa, difícil de representar no formato tabular. Alguns exemplos: objetos compostos (objetos dentro de objetos), relações de hierarquia, atributos multivalorados, arrays, dados ausentes, etc.
* Ambos podem ser utilizados para transportar informações em aplicações AJAX.
* Ambos podem ser considerados padrões para representação de dados. XML é um padrão W3C, enquanto JSON foi formalizado na RFC 4627.
* Ambos são independentes de linguagem. Dados representados em XML e JSON podem ser acessados por qualquer linguagem de programação, através de API’s específicas.
Diferenças:
* Não é uma linguagem de marcação. Não possui tags de abertura e de fechamento;
* Representa as informações de forma mais compacta;
* Não permite a execução de instruções de processamento, enquanto é possível em XML.
* É tipicamente destinado para a troca de informações, enquanto XML possui mais aplicações. Por exemplo: existem bancos de dados no formato XML e estruturados em SGBD XML nativo.

## Tipos de dados, sintaxe e exemplos

Os tipos de dados básicos do JSON são:
* Number: um número que pode ter sinal, uma parte fracionária separada por um ponto (. , como é usual em alguns países) e eventualmente usar a notação E exponencial, mas não pode incluir não-números como NaN. Não há distinção entre inteiros e números de ponto flutuante, refletindo o fato de que o JavaScript armazena qualquer número como ponto flutuante de dupla precisão, mas outras linguagens que implementem JSON podem ter diferenças na representação dos números.
* String: uma cadeia de zero ou mais caracteres Unicode. Strings são delimitados por aspas duplas (") e suportam a barra inversa (\) como caractere de escape.
* Boolean: um dos valores true ou false, correspondendo aos valores lógicos verdadeiro e falso.
* Array: uma lista ordenada de zero ou mais valores, cada um podendo ser de qualquer tipo. Arrays são delimitados por colchetes (), dentro dos quais ficam os valores, também conhecidos como elementos, separados por vírgulas. O primeiro elemento é o de índice 0.
* Object: uma coleção não ordenada de pares atributo-valor onde os atributos (ou nomes ou chaves) são strings. Como os objects pretendem representar vetores associativos (ECMA-404), é recomendado, mas não obrigatório, que cada atributo seja único dentro de um objeto. Objects são delimitados por chaves () e usam vírgulas para separar cada par, enquanto que no par o atributo e o valor ficam separados por dois pontos (:).
* null: Valor vazio ou nulo (não confundir com o zero) representado pela palavra null.
Espaços em branco são permitidos com limites e ignorados em volta e entre elementos sintáticos, mas não dentro de um string. Só quatro caracteres são tratados assim: o espaço, a tabulação horizontal(TAB), o line feed(LF) e o carriage return(CR). Em particular, a marca de ordem de byte não deve aparecer em um documento JSON conforme o padrão. JSON não tem uma sintaxe para comentários. Para troca de dados em um ecossistema aberto, JSON deve estar codificado em UTF-8.

### Exemplo de uma representação de um menu

O código acima em JSON representado no padrão XML:

## Usando JSON no JavaScript

Em 2018, todos os navegadores principais suportavam no mínimo a quinta edição do ECMAScript que provia uma forma segura e rápida de decodificar JSON: