Cole JSON e veja instantaneamente se é analisado corretamente. Detecta erros comuns de sintaxe: vírgula final, aspas simples, chaves sem aspas e parênteses.
Carregando editor...
Carregando editor...
A entrada anterior é quase JSON válido. O problema é a vírgula final depois de false no segundo objeto de usuário:
{"name": "Bob", "active": false,}
Remova essa vírgula é o documento se torna válido:
{
"users": [
{"name": "Alice", "active": true},
{"name": "Bob", "active": false}
]
}
Este é o erro JSON mais comum que desenvolvedores enfrentam, e é fácil não perceber porque JavaScript o tolera.
A sintaxe JSON é definida pela RFC 8259. As regras são mais simples do que a maioria espera. Um documento JSON válido é um de: um objeto, um array, uma string, um número, um booleano (true ou false) ou null. Objetos são coleções de pares chave-valor. Chaves devem ser strings (com aspas duplas). Valores podem ser qualquer valor JSON. Arrays são listas ordenadas de valores JSON.
Regras estruturais que mais pegam os desenvolvedores:
O último elemento de um array ou o último par chave-valor de um objeto não deve ter vírgula final. [1, 2, 3,] é inválido. {"a": 1, "b": 2,} é inválido.
Todas as strings devem usar aspas duplas. 'Alice' não é JSON válido. "Alice" é.
Chaves de objeto devem ser strings com aspas. {name: "Alice"} não é JSON. {"name": "Alice"} é.
JSON não tem sintaxe de comentários. // comentário e /* comentário */ causam erro de análise. Isso surpreende quem vem de linguagens que suportam comentários em arquivos de configuração.
NaN, Infinity e -Infinity não são valores JSON válidos. Se você tentar serializar NaN para JSON com JSON.stringify(), obtém null. O json.dumps() do Python lança ValueError por padrão.
| Erro | Exemplo | Correção |
|---|---|---|
| Vírgula final | {"a": 1,} |
{"a": 1} |
| Strings com aspas simples | {'key': 'value'} |
{"key": "value"} |
| Chaves sem aspas | {key: "value"} |
{"key": "value"} |
| Comentários | {"a": 1 // nota} |
Remova comentários |
| NaN ou undefined | {"val": NaN} |
Substitua por null |
Para validação rápida sem navegador, jq é a ferramenta padrão. Ele sai com código não zero se a entrada for JSON inválido, o que o torna útil em scripts.
Validar um arquivo:
jq . file.json
Validar uma string:
echo '{"name": "Alice",}' | jq .
# parse error (Expected another key-value pair or '}')
A biblioteca padrão do Python também válida sem dependências:
python3 -m json.tool file.json
Para pipelines de CI, ambas as ferramentas funcionam como etapas de validação que falham ruidosamente em entrada malformada.
| Formato | Comentários | Vírgulas finais | Aspas simples | Casó de uso |
|---|---|---|---|---|
| JSON | Não | Não | Não | Troca de dados, APIs |
| JSONC | Sim | Sim | Não | Arquivos de config (VS Code) |
| JSON5 | Sim | Sim | Sim | Arquivos de config (Babel, ESLint) |
Se você está construindo uma API ou escrevendo dados que serão analisados por uma biblioteca, use JSON estrito. Se você está escrevendo um arquivo de configuração que uma ferramenta específica lê, verifique qual formato essa ferramenta espera. Misturá-los é uma fonte comum de falhas silenciosas quando arquivos de configuração são passados para analisadores padrão.
RFC 8259 é a especificação JSON atual, publicada em 2017. Ela substituiu a RFC 7159. A especificação é legível em cerca de 20 minutos e vale a pena folhear uma vez. Define a gramática formalmente, cobre precisão numérica e específica a codificação UTF-8. Um ponto chave da especificação: um analisador JSON pode aceitar ou rejeitar chaves duplicadas em um objeto. A maioria dos analisadores as aceita e usa o último valor, mas o comportamento é indefinido e você não deve confiar nisso.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.