JSON aparece em papeis suficientemente diferentes que vale a pena separa-los: o formato e o mesmo em todo lugar, mas o que cada caso de uso realmente precisa dele difere, e confundir um com outro e uma fonte comum de decisoes desajeitadas (adicionar comentarios a uma carga util de API gerada por maquina, ou esperar que um pipeline de log NDJSON seja analisado como um unico documento JSON).
Cargas uteis de API REST
O caso de uso mais comum por volume. Um corpo de requisicao e um corpo de
resposta sao cada um um documento JSON, Content-Type: application/json,
gerado por um lado e consumido pelo outro sem nenhum humano lendo no meio.
Nada aqui precisa de comentarios ou conveniencia de edicao manual; o que
precisa e uma gramatica sem ambiguidade que todas as linguagens analisem da
mesma forma, que e a verdadeira forca do JSON. Uma carga util de REST tambem
e a forma para a qual o Validador de JSON Schema
existe: verificar uma resposta contra o contrato que a API deveria cumprir,
e ver exatamente qual campo o viola e por que, antes que esse bug chegue ao
codigo de producao que assume que o campo esta la.
Configuracao de aplicacao
package.json, tsconfig.json, composer.json, e dezenas de configuracoes
de ferramentas alem. Esse e o caso de uso onde a falta de comentarios do
JSON realmente custa algo: uma configuracao sem explicacao ao lado, porque o
formato nao tem onde colocar uma. Algumas ferramentas contornam isso com uma
chave // comment que ninguem le programaticamente, outras mudam para YAML
ou um superconjunto de JSON (JSON5, JSONC) que adiciona comentarios de volta.
Veja JSON vs YAML para o tradeoff completo; a versao
curta e que arquivos de configuracao editados manualmente frequentemente se
beneficiam dos comentarios do YAML, enquanto a configuracao gerada e consumida
inteiramente por ferramentas funciona bem como JSON simples.
NoSQL e bancos de dados de documentos
MongoDB armazena documentos como BSON, um formato binario que e um superconjunto do modelo de dados do JSON, e retorna JSON (ou uma sintaxe de shell semelhante a JSON) quando voce consulta. CouchDB e a maioria dos armazenadores de documentos aceitam e retornam JSON diretamente. O apelo aqui e estrutural: toda a proposta de um banco de dados de documentos e armazenar dados aproximadamente na forma que sua aplicacao ja usa, em vez de normalizar em linhas e chaves estrangeiras primeiro, e o modelo de objetos e arrays do JSON e proximo o suficiente dos tipos nativos da maioria das linguagens para que a traducao seja quase gratuita.
Linhas de log e dados em streaming: NDJSON
Um unico documento JSON nao e bem transmitido: um analisador geralmente precisa de todo antes de poder produzir um valor, porque um documento so e valido quando seu colchete final chega. Newline Delimited JSON (NDJSON) resolve isso fazendo cada linha seu proprio valor JSON completo e independente, entao um pipeline de log, um topico Kafka, ou uma grande exportacao pode ser processado linha por linha sem manter todo o arquivo em memoria. O Conversor JSON para NDJSON converte um array JSON para esse formato linha-por-registro e volta, com recuperacao para um stream que tem uma linha malformada em vez de falhar todo o arquivo por um registro ruim.
Armazenamento do navegador
localStorage e sessionStorage so armazenam strings; qualquer coisa
estruturada entra como JSON.stringify(value) e sai como
JSON.parse(armazenado). Esse tambem e onde o problema de precisao de
numeros que Tipos de Dados JSON Explicados cobre
se torna um bug real em vez de uma curiosidade: fazer o round-trip de um
grande ID inteiro atraves de localStorage via o proprio JSON.parse do
navegador pode silenciosamente alterar o valor, que e exatamente o modo de
fallo para o qual as ferramentas deste site sao construidas para evitar
e reportar em vez de reproduzir.
Testando com seus proprios dados
Cada ferramenta mencionada acima roda inteiramente no seu navegador: nada colado no Formatador JSON, no conversor NDJSON, ou no Validador de Schema e nunca enviado para lugar nenhum, o que importa mais para exatamente o tipo de respostas de API reais e arquivos de configuracao dos quais esta pagina trata.