O que é JSON e como usá-lo?
JSON (JavaScript Object Notation) é um formato padronizado para representar dados estruturados. Embora o JSON tenha surgido da linguagem de programação JavaScript, agora é um método onipresente para a troca de dados entre sistemas. A maioria das APIs modernas aceita solicitações JSON e retorna respostas JSON, portanto, é bom ter um bom conhecimento prático do formato e de suas funções.
Neste artigo, explicaremos o que é JSON, como ele expressa vários tipos de dados e como você pode criá-lo e usá-lo em linguagens de programação populares. Também veremos algumas das limitações do JSON e as alternativas que surgiram.
Noções básicas de JSON
O JSON foi originalmente desenvolvido por Douglas Crockford como um formato sem estado para transferência de dados entre navegadores e servidores. No início dos anos 2000, os sites começaram a obter dados adicionais de forma assíncrona de seu servidor após o carregamento inicial da página. Como um formato de texto baseado em JavaScript, o JSON facilitou a obtenção e o uso de dados nesses aplicativos. A especificação acabou sendo padronizada como ECMA-404 em 2013 .
JSON é sempre passado como uma string. Essas strings podem ser decodificadas em vários tipos de dados básicos, incluindo números, booleanos, matrizes e objetos. Isso significa que hierarquias e relacionamentos de objetos podem ser armazenados durante a transmissão e, em seguida, remontados na extremidade receptora de maneira adequada ao ambiente de programação.
Exemplo de JSON simples
Esta é a representação JSON da postagem do blog:
Este exemplo demonstra todos os tipos de dados JSON. Também ilustra a brevidade dos dados JSON, uma das características que o torna tão atraente para uso em uma API. Além disso, JSON é relativamente fácil de ler como está, ao contrário de formatos mais detalhados , como XML .
Tipos de dados JSON
Seis tipos de dados podem ser representados nativamente em JSON:
- Strings — as strings são colocadas entre aspas duplas; caracteres podem ser escapados com uma barra invertida.
- Números – os números são escritos como números sem aspas. Você pode incluir um componente fracionário para denotar um número de ponto flutuante. A maioria das implementações de análise JSON assume um número inteiro quando não há ponto decimal.
- Valores booleanos – valores literais
true
e são suportados.false
- Nulo – Um
null
valor literal pode ser usado para indicar um valor vazio ou ausente. - Matrizes. Uma matriz é uma lista simples entre colchetes. Cada elemento na lista é separado por uma vírgula. As matrizes podem conter qualquer número de elementos e podem usar todos os tipos de dados suportados.
- Objetos – Objetos são criados por chaves. Este é um conjunto de pares chave-valor, onde as chaves são strings entre aspas duplas. Cada chave tem um valor que pode receber qualquer um dos tipos de dados disponíveis. Você pode aninhar objetos para criar hierarquias em cascata. Cada valor deve ser seguido por uma vírgula para indicar o fim desse par chave-valor.
Os analisadores JSON convertem automaticamente esses tipos de dados em estruturas apropriadas para seu idioma. id
Por exemplo, você não precisa converter manualmente para um inteiro. Analisar toda a string JSON é suficiente para mapear os valores de volta ao formato de dados original.
Semântica e Validação
JSON tem certas regras que devem ser seguidas ao codificar dados. As linhas que não correspondem à sintaxe não podem ser analisadas pelos consumidores.
É especialmente importante prestar atenção às aspas em torno de strings e chaves de objeto. Você também deve garantir que uma vírgula seja usada após cada entrada em um objeto ou matriz. No entanto, o JSON não permite uma vírgula após a última entrada – a inclusão inadvertida de uma delas é uma causa comum de erros de validação. A maioria dos editores de texto destaca problemas de sintaxe para ajudá-lo a identificar erros.
Apesar desses problemas comuns, o JSON é um dos formatos de dados mais fáceis de escrever à mão. A maioria das pessoas acha a sintaxe rápida e fácil quando se familiariza com ela. Em geral, o JSON geralmente é menos propenso a erros do que o XML, onde tags de início e fim incompatíveis, declarações de esquema inválidas e problemas de codificação geralmente causam problemas.
Notação de conteúdo JSON
A extensão .json
é normalmente usada quando JSON é salvo em um arquivo. O conteúdo JSON tem um tipo MIME padronizado application/json
, embora text/json
às vezes seja usado por motivos de compatibilidade. Atualmente, você precisa confiar nos cabeçalhos application/json
for Accept
e Content-Type
HTTP.
A maioria das APIs que usam JSON encapsula tudo em um objeto de nível superior:
No entanto, isso não é necessário – um tipo literal é válido como o nó de nível superior em um arquivo, portanto, todos os exemplos a seguir também são válidos para JSON:
Eles serão decodificados nos escalares correspondentes em sua linguagem de programação.
Trabalhando com JSON
A maioria das linguagens de programação tem suporte embutido para JSON. Veja como interagir com dados JSON em vários ambientes populares.
JavaScript
Em JavaScript, os métodos e JSON.stringify()
são JSON.parse()
usados para codificar e decodificar strings JSON:
PHP
As funções equivalentes em PHP são json_encode()
e json_decode()
:
Pitão
O Python fornece serialização e desserialização, respectivamente json.dumps()
:json.loads()
Rubi
Ruby JSON.generate
também oferece JSON.parse
:
Limitações de JSON
JSON é um formato leve focado em passar valores em sua estrutura de dados. Isso permite uma análise rápida e é fácil de trabalhar, mas significa que há desvantagens que podem ser frustrantes. Aqui estão alguns dos maiores problemas.
Sem comentários
Os dados JSON não podem incluir comentários. A falta de anotações reduz a clareza e força a documentação a ser postada em outro lugar. Isso pode tornar o JSON inadequado para situações como arquivos de configuração em que as alterações não são frequentes e a finalidade dos campos pode não ser clara.
Sem esquemas
JSON não permite que você defina um esquema para seus dados. id
Por exemplo, não é possível fornecer um campo inteiro obrigatório. Isso pode levar à corrupção não intencional de estruturas de dados.
Sem links
Os campos não podem se referir a outros valores na estrutura de dados. Isso geralmente leva à repetição, o que aumenta o tamanho do arquivo. Voltando ao exemplo de postagem de blog do exemplo anterior, você pode ter a seguinte lista de postagens de blog:
Ambas as mensagens têm o mesmo autor, mas as informações associadas a este objeto tiveram que ser duplicadas. Em um mundo ideal, as implementações de um analisador JSON poderiam produzir a estrutura mostrada acima a partir de uma entrada como a seguinte:
No momento, isso não é possível com JSON padrão.
Nenhum tipo de dados estendido
Os seis tipos de dados suportados não possuem muitos tipos de valores comuns. O JSON não pode armazenar datas, horas ou geolocalizações de forma nativa, portanto, você precisará escolher seu próprio formato para essas informações.
Isso causa inconsistências estranhas e casos extremos. Se o seu aplicativo lida com timestamps como strings, como 2022-07-01T12:00:00+00:00
, mas uma API externa representa timestamps como segundos após o Unix epoch 1657287000
, você precisa se lembrar de quando usar cada um dos formatos.
Alternativas JSON
YAML é a principal alternativa ao JSON. É um superconjunto do formato com uma representação mais legível, tipos de dados personalizados e suporte para links. Destina-se a resolver a maioria dos problemas de usabilidade associados ao JSON.
O YAML se tornou difundido em arquivos de configuração, bem como em ferramentas de DevOps, IaC e ferramentas de vigilância. É menos comumente usado como formato de troca de dados para APIs. A relativa complexidade do YAML significa que ele é menos acessível para iniciantes. Pequenos erros de sintaxe podem causar erros de análise confusos.
Os buffers de protocolo (protobufs) são outro novo concorrente JSON para serializar dados estruturados. Protobufs têm declarações de tipo de dados, campos obrigatórios e suporte para a maioria das principais linguagens de programação. O sistema está ganhando popularidade como uma maneira mais eficiente de transferir dados entre redes.
Resumo
JSON é um formato de representação de dados baseado em texto que pode codificar seis tipos diferentes de dados. JSON tornou-se a espinha dorsal do ecossistema de desenvolvimento de software; ele é suportado por todas as principais linguagens de programação e se tornou a escolha padrão para a maioria das APIs REST desenvolvidas nas últimas duas décadas.
Embora a simplicidade do JSON seja parte de sua popularidade, ela também limita o que pode ser alcançado com o formato. A falta de suporte para esquemas, comentários, referências de objetos e tipos de dados personalizados significa que alguns aplicativos vão superar os recursos do JSON. Alternativas mais jovens, como YAML e Protobuf, ajudaram a resolver esses problemas, enquanto o XML continua sendo um concorrente para aplicativos que desejam definir o esquema de dados e não têm medo de verbosidade.
Deixe um comentário