Validador de JSON online

O validador de JSON confere se um texto segue a sintaxe do formato JSON e, quando não segue, mostra a mensagem de erro com a linha e a coluna. Se estiver válido, informa o tipo, a quantidade de chaves ou itens e a profundidade. Tudo roda no seu navegador: o JSON colado não é enviado a nenhum servidor.

Atualizado em · Por Leonardo Gaertner

Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

Como usar

  1. Cole o JSON no campo (ou clique em Colar).
  2. Veja o resultado logo abaixo: válido ou com o erro e a posição dele.
  3. Corrija o ponto indicado e o resultado se atualiza sozinho a cada alteração.

Como funciona

A ferramenta lê o texto com o interpretador de JSON do próprio navegador. Se ele aceita, o JSON é válido; se recusa, a mensagem de erro é exibida e, quando o navegador informa a posição, convertida em linha e coluna.

O JSON é mais rígido que um objeto JavaScript. As chaves e os textos precisam de aspas duplas, e não são permitidos aspas simples, vírgula depois do último item, comentários, undefined, NaN e Infinity.

Esta ferramenta valida a sintaxe. Ela não confere se os campos e tipos seguem um contrato específico, o que é papel de um JSON Schema.

Erros de sintaxe mais comuns

{'nome': 'PraDev'} usa aspas simples; o certo é {"nome": "PraDev"}

{"a": 1,} tem vírgula sobrando depois do último item

{nome: "PraDev"} a chave está sem aspas

{"a": 1 "b": 2} falta uma vírgula entre os itens

Fonte: RFC 8259: o formato JSON

Em código

Para formatar e validar JSON em código, leia o texto e escreva de novo com recuo, tratando o erro de leitura. No PHP, use as opções que mantêm acentos e barras.

JavaScript
function formatarJSON(texto, espacos = 2) {
  return JSON.stringify(JSON.parse(texto), null, espacos);
}

function validarJSON(texto) {
  try {
    JSON.parse(texto);
    return { valido: true };
  } catch (erro) {
    return { valido: false, mensagem: erro.message };
  }
}
Python
import json


def _recusar(nome):
    raise ValueError(f"{nome} não é JSON válido")


def formatar_json(texto: str, espacos: int = 2) -> str:
    # parse_constant: o Python aceitaria NaN e Infinity, que o JSON não permite
    dados = json.loads(texto, parse_constant=_recusar)
    return json.dumps(dados, indent=espacos, ensure_ascii=False)


def validar_json(texto: str) -> dict:
    try:
        json.loads(texto, parse_constant=_recusar)
        return {"valido": True}
    except json.JSONDecodeError as e:
        return {"valido": False, "mensagem": e.msg, "linha": e.lineno, "coluna": e.colno}
    except ValueError as e:
        return {"valido": False, "mensagem": str(e)}

Recusa NaN e Infinity, que o Python aceitaria.

PHP
<?php
function formatarJson(string $texto): string
{
    $dados = json_decode($texto, false, 512, JSON_THROW_ON_ERROR);
    // Sem as duas últimas opções, o PHP escreveria \u00e7 no lugar de ç
    // e \/ no lugar de /
    return json_encode(
        $dados,
        JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
    );
}

function validarJson(string $texto): array
{
    try {
        json_decode($texto, false, 512, JSON_THROW_ON_ERROR);
        return ['valido' => true];
    } catch (JsonException $e) {
        return ['valido' => false, 'mensagem' => $e->getMessage()];
    }
}

Perguntas frequentes

Por que o meu JSON é inválido?

Os motivos mais comuns são aspas simples no lugar de duplas, vírgula depois do último item, chaves sem aspas, comentários e texto solto antes ou depois do JSON. A linha e a coluna do erro ajudam a achar o ponto exato.

JSON aceita comentários?

Não. O padrão JSON não tem comentários. Alguns programas aceitam variações como JSONC ou JSON5, mas um validador de JSON puro vai apontar erro nesses arquivos.

O validador confere se os campos estão certos?

Não. Ele confere só a sintaxe, isto é, se o texto é um JSON bem formado. Para exigir campos, tipos e valores específicos, use um JSON Schema.

O JSON que eu colo é enviado para algum servidor?

Não. A validação acontece no seu navegador e o conteúdo não é enviado nem armazenado pelo PraDev.