Bancos de dados e SQL

JSON estendidocom tipos à vista

Converta EJSON estrito entre Canonical e Relaxed e confira os avisos de precisão.

JSON estendido

Analisar ObjectId

Entrada EJSON

Resultado JSON

O texto é processado neste navegador, sem conexão ao banco nem envio do documento.

Saída e interpretação

Um único valor JSON estrito. Expressões de shell, comentários e chaves duplicadas são rejeitados.

Inteiros sem invólucro são inferidos como Int32/Int64; decimais e expoentes, como Double. Strings continuam strings.

Limites: 500.000 unidades UTF-16, profundidade 100, 50.000 nós e 2.000.000 de caracteres na saída.

A entrada ou as opções mudaram. Converta antes de exportar.

O JSON estendido é comum em exportações com $oid, $date ou $numberDecimal. Essas estruturas identificam valores BSON. Apagá-las para deixar o texto mais simples muda o que o próximo programa consegue reconstruir.

O exemplo traz um número de sequência acima do limite seguro do JavaScript. Observe separadamente a preservação dos dígitos e do tipo numérico. A entrada continua disponível ao lado do resultado, sem ser sobrescrita pela conversão.

Por que usar JSON estendido?

Entenda a mudança de representação antes de encaminhar os dados.

Manter os invólucros necessários

O JSON estendido começa no modo canônico. O modo relaxado simplifica números finitos e datas compatíveis, mas mantém os invólucros de ObjectId e Decimal128. A comparação lado a lado mostra essas diferenças sem alterar a fonte.

Três linhas tipadas: o invólucro numérico abre, enquanto os de identificador e decimal permanecem

Escrever Int64 com todos os dígitos

Um Long como 9007199254740993 é escrito a partir de seu inteiro exato. O aviso lembra que consumidores baseados em JavaScript Number ainda podem arredondá-lo. Preservar o texto não garante a precisão do programa que vai lê-lo.

Uma sequência completa de blocos numéricos atravessa o documento com um aviso no lado receptor

Preparar a representação para o destino

01

Usar dados em vez de comandos

ObjectId() e ISODate() não pertencem à sintaxe JSON. Exporte antes as estruturas $oid e $date. Você pode inserir um documento, um array ou um valor isolado.

  • Exemplo e Limpar mostram uma prévia; depois de aplicar, Desfazer restaura uma vez a entrada e a saída.
02

Conferir os tipos ao trocar de modo

Canonical mantém tipos numéricos explícitos. Relaxed facilita a leitura da representação JSON; confira os avisos antes de usá-la no próximo sistema.

  • Trocar o modo ou a indentação bloqueia imediatamente a exportação do resultado anterior.
03

Controlar a execução automática

A conversão espera 350 ms após a última edição. Desativar a opção cancela o trabalho pendente e mostra o botão para converter.

  • Ctrl/Cmd + Enter também executa. A cópia e o download incluem todo o resultado, mesmo fora da área visível.

Interpretação clara de tipos e valores

Conjunto BSON definido

São validados ObjectId, Decimal128, Int32, Int64, Double, datas, Binary, UUID, expressões regulares, Timestamp e MinKey/MaxKey. UUID é normalizado para o invólucro binário de subtipo 04. As opções de regex são ordenadas, sem executar o padrão.

Datas além de JavaScript Date

Canonical mantém milissegundos de 64 bits com sinal como strings, inclusive fora do intervalo de Date. Relaxed usa UTC ISO apenas de 1970 a 9999; outras datas continuam com o invólucro de milissegundos, sem cortar o ano.

Sem adivinhar o tipo de strings

Inteiros sem invólucro viram Int32 ou Int64 conforme o intervalo. Formas decimais e exponenciais viram Double e podem sofrer arredondamento binário de 64 bits. Uma string que parece data ou identificador permanece uma string.

Entradas aceitas e limites

Parte estrita do formato v2
Não há execução de shell nem reparo de sintaxe. v1, Code/Scope, DBPointer, Undefined e Symbol são rejeitados. Campos comuns desconhecidos são mantidos, mas estruturas reconhecidas devem conter exatamente as chaves exigidas.
Sem remoção geral de tipos
Relaxed ainda é EJSON. Não apaga toda chave com cifrão nem força Decimal128 para Number. Mudar para Canonical não recupera com certeza o tipo BSON que já foi perdido antes de o texto chegar aqui.
Um valor JSON por vez
JSONL, documentos concatenados, BSON binário, contêineres Hex/Base64, mongodump e envio de arquivos não são aceitos. Converta um documento ou prepare um array. Não há conexão ao banco nem importação de coleções.
Orçamentos e intervalos explícitos
Até 500.000 unidades UTF-16, 100 níveis, 50.000 nós e 2.000.000 de caracteres na saída. Estouro de Int64, datas inválidas e chaves duplicadas interrompem a conversão inteira, sem permitir exportação parcial.
Normalização não é cópia de bytes
Espaços e formas de data podem mudar. Decimal128 e regex seguem o mecanismo oficial; números de ponto flutuante seguem precisão binária. Após qualquer edição, exportar só fica disponível quando a conversão atual termina sem erro.

Dúvidas sobre JSON estendido

Qual a diferença entre Canonical e Relaxed?

Canonical prioriza informações de tipo e usa invólucros também nos números. Relaxed deixa números finitos e datas permitidas mais legíveis. Ambos são JSON válido; ObjectId e Decimal128 preservam seus invólucros nos dois modos.

Posso colar a saída do mongosh diretamente?

Somente se ela já for JSON/EJSON estrito. ObjectId("…"), ISODate("…") e NumberLong("…") são expressões de shell e serão rejeitadas. Primeiro exporte ou serialize o documento em Extended JSON. O código colado não é executado.

Por que NumberLong aparece como string?

No Canonical, a string em $numberLong impede que um leitor JSON comum arredonde os dígitos cedo demais. Aqui Relaxed escreve o literal inteiro completo. Para números grandes, o programa receptor ainda precisa de um parser numérico sem perda.

Por que não usar number para Decimal128?

JavaScript Number usa precisão binária de 64 bits, diferente da precisão decimal de Decimal128. A string $numberDecimal mantém a representação e o tipo. Por isso seu invólucro permanece mesmo no modo Relaxed.

É possível converter um arquivo mongoexport inteiro?

Apenas se ele contiver um único valor JSON dentro dos limites, como um array. A saída comum com um documento por linha é JSONL e não é aceita. Processe cada documento ou exporte um array com a opção apropriada.

Encontrou um resultado inesperado?

Revisar os tipos antes de salvar

Volte ao JSON estendido, escolha a representação desejada e confira os avisos de precisão antes de baixar o resultado.