[ad_1]
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 de troca de dados entre sistemas. A maioria das APIs modernas aceita solicitações JSON e emite respostas JSON, portanto, é útil ter um bom conhecimento prático do formato e de suas características.
Neste artigo, explicaremos o que é JSON, como ele expressa diferentes tipos de dados e as maneiras de produzi-lo e consumi-lo em linguagens de programação populares. Também abordaremos algumas das limitações do JSON e as alternativas que surgiram.
Noções básicas de JSON
O JSON foi originalmente projetado por Douglas Crockford como um formato sem estado para comunicação de dados entre navegadores e servidores. No início dos anos 2000, os sites estavam começando a obter dados extras de forma assíncrona de seu servidor, após o carregamento inicial da página. Como um formato baseado em texto derivado do JavaScript, o JSON facilitou a obtenção e o consumo de dados nesses aplicativos. A especificação acabou sendo padronizada como ECMA-404 em 2013.
JSON é sempre transmitido como uma string. Essas strings podem ser decodificadas em uma variedade de tipos de dados básicos, incluindo números, booleanos, matrizes e objetos. Isso significa que hierarquias e relacionamentos de objetos podem ser preservados durante a transmissão e, em seguida, remontados na extremidade receptora de maneira apropriada ao ambiente de programação.
Um exemplo básico de JSON
Esta é uma representação JSON de uma postagem de blog:
{ "id": 1001, "title": "What is JSON?", "author": { "id": 1, "name": "James Walker" }, "tags": ["api", "json", "programming"], "published": false, "publishedTimestamp": null }
Este exemplo demonstra todos os tipos de dados JSON. Ele também ilustra a concisão dos dados formatados em JSON, um dos recursos que o torna tão atraente para uso em APIs. 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:
- Instrumentos de corda – Strings são colocadas entre aspas duplas; caracteres podem ser escapados usando barras invertidas.
- Números – Os números são escritos como dígitos sem aspas. Você pode incluir um componente fracionário para indicar um float. A maioria das implementações de análise JSON assume um número inteiro quando nenhum ponto decimal está presente.
- Booleanos – valores literais
true
Sfalse
eles são compatíveis. - Nulo – O
null
O valor literal pode ser usado para indicar um valor vazio ou omitido. - arranjos – Um array é uma lista simples denotada por colchetes. Cada item 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 – Os objetos são criados usando colchetes. Eles são uma coleção 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. Uma vírgula deve seguir cada valor, significando o fim desse par chave-valor.
Os analisadores JSON convertem automaticamente esses tipos de dados em estruturas apropriadas para seu idioma. Não há necessidade de enviar manualmente id
para um número inteiro, por exemplo. Analisar toda a string JSON é suficiente para mapear os valores para seu formato de dados original.
Semântica e Validação
O JSON tem certas regras que devem ser seguidas ao codificar seus dados. Os consumidores não poderão analisar strings que não estejam de acordo com a sintaxe.
É particularmente 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. JSON Não no entanto, permita uma vírgula à direita após a última entrada; incluir acidentalmente um é uma causa comum de erros de validação. A maioria dos editores de texto destacará os problemas de sintaxe para você, ajudando a descobrir erros.
Apesar desses pontos de falha 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 conveniente quando se familiariza com ela. Em geral, o JSON tende a ser menos propenso a erros do que o XML, onde tags de abertura e fechamento incompatíveis, declarações de esquema inválidas e problemas de codificação de caracteres geralmente causam problemas.
Designação de conteúdo JSON
a .json
A extensão é normalmente usada quando JSON é salvo em um arquivo. O conteúdo JSON tem o tipo MIME padronizado application/json
a pesar de que text/json
às vezes é usado por motivos de compatibilidade. Hoje você deve confiar application/json
por Accept
S Content-Type
Cabeçalhos HTTP.
A maioria das APIs que usam JSON encapsulará tudo em um objeto de nível superior:
No entanto, isso não é necessário: um tipo literal é válido como um nó de nível superior em um arquivo, portanto, os exemplos a seguir também são JSON válidos:
Eles serão decodificados para seus respectivos escalares em sua linguagem de programação.
Trabalhar com JSON
A maioria das linguagens de programação tem suporte JSON embutido. Veja como interagir com dados JSON em alguns ambientes populares.
javascript
Em JavaScript o JSON.stringify()
S JSON.parse()
Os métodos são usados para codificar e decodificar strings JSON:
const post = { id: 1001, title: "What Is JSON?", author: { id: 1, name: "James Walker" } }; const encodedJson = JSON.stringify(post); // {"id": 1001, "title": "What Is JSON?", ...} console.log(encodedJson); const decodedJson = JSON.parse(encodedJson); // James Walker console.log(decodedJson.author.name);
PHP
As funções equivalentes em PHP são json_encode()
S json_decode()
:
$post = [ "id" => 1001, "title" => "What Is JSON?", "author" => [ "id" => 1, "name" => "James Walker" ] ]; $encodedJson = json_encode($post); // {"id": 1001, "title": "What Is JSON?", ...} echo $encodedJson; $decodedJson = json_decode($encodedJson, true); // James Walker echo $decodedJson["author"]["name"];
Piton
Python fornece json.dumps()
S json.loads()
para serializar e desserializar respectivamente:
import json post = { "id": 1001, "title": "What Is JSON?", "author": { "id": 1, "name": "James Walker" } } encodedJson = json.dumps(post) # {"id": 1001, "title": "What Is JSON?", ...} print(encodedJson) decodedJson = json.loads(encodedJson) # James Walker print(decodedJson["author"]["name"])
Rubi
ofertas de rubi JSON.generate
S JSON.parse
:
require "json" post = { "id" => 1001, "title" => "What Is JSON?", "author" => { "id" => 1, "name" => "James Walker" } } encodedJson = JSON.generate(post) # {"id": 1001, "title": "What Is JSON?", ...} puts encodedJson decodedJson = JSON.parse(encodedJson) # James Walker puts decodedJson["author"]["name"]
Limitações de JSON
JSON é um formato leve que foca em passar os valores dentro de sua estrutura de dados. Isso torna a análise rápida e fácil de usar, mas significa que há desvantagens que podem causar frustração. Esses são alguns dos maiores problemas.
Os dados JSON não podem incluir comentários. A falta de anotações reduz a clareza e obriga você a colocar a documentação em outro lugar. Isso pode tornar o JSON inadequado para situações como arquivos de configuração, onde as modificações não são frequentes e os propósitos dos campos podem não ser claros.
sem esquemas
JSON não permite que você defina um esquema para seus dados. Não há como impor isso id
é um campo inteiro obrigatório, por exemplo. Isso pode levar a estruturas de dados malformadas involuntariamente.
sem referências
Os campos não podem referenciar outros valores na estrutura de dados. Isso geralmente causa replays que aumentam o tamanho do arquivo. Voltando ao exemplo de postagem de blog acima, você pode ter uma lista de postagens de blog como esta:
{ "posts": [ { "id": 1001, "title": "What is JSON?", "author": { "id": 1, "name": "James Walker" } }, { "id": 1002, "title": "What is SaaS?", "author": { "id": 1, "name": "James Walker" } } ] }
Ambas as postagens têm o mesmo autor, mas as informações associadas a esse objeto tiveram que ser duplicadas. Em um mundo ideal, as implementações do analisador JSON poderiam produzir a estrutura mostrada acima a partir de uma entrada semelhante à seguinte:
{ "posts": [ { "id": 1001, "title": "What is JSON?", "author": "{{ .authors.james }}" }, { "id": 1002, "title": "What is SaaS?", "author": "{{ .authors.james }}" } ], "authors": { "james": { "id": 1, "name": "James Walker" } } }
No momento, isso não é possível com JSON padrão.
Sem tipos de dados avançados
Os seis tipos de dados suportados ignoram muitos tipos de valores comuns. O JSON não pode armazenar datas, horas ou pontos de geolocalização nativamente, portanto, você deve decidir seu próprio formato para essas informações.
Isso causa discrepâncias inconvenientes e casos extremos. Se seu aplicativo trata carimbos de data/hora como strings, como 2022-07-01T12:00:00+00:00
mas uma API externa apresenta o tempo como segundos após a época do Unix: 1657287000
– você precisará lembrar quando usar cada um dos formatos.
Alternativas JSON
YAML é a principal alternativa JSON. É um superconjunto do formato que possui uma apresentação mais legível por humanos, tipos de dados personalizados e suporte para referências. Destina-se a abordar a maioria dos desafios de usabilidade associados ao JSON.
O YAML teve ampla adoção para arquivos de configuração e dentro de DevOps, IaC e ferramentas de observabilidade. É usado com menos frequência como formato de troca de dados para APIs. A relativa complexidade do YAML significa que ele é menos acessível aos recém-chegados. Pequenos erros de sintaxe podem causar erros de análise confusos.
Os buffers de protocolo (protobufs) são outro concorrente JSON emergente projetado 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 transmitir dados pelas redes.
Resumo
JSON é um formato de representação de dados baseado em texto que pode codificar seis tipos de dados diferentes. JSON tornou-se um elemento básico do ecossistema de desenvolvimento de software; ele suporta 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 impõe limitações ao que você pode realizar com o formato. A falta de suporte para esquemas, comentários, referências de objetos e tipos de dados personalizados significa que alguns aplicativos descobrirão que excedem o que é possível com JSON. Alternativas mais jovens, como YAML e Protobuf, ajudaram a enfrentar esses desafios, enquanto o XML continua sendo um concorrente para aplicativos que desejam definir um esquema de dados e não se importam com a verbosidade.
[ad_2]