Por que 9007199254740993 vira outro ID

Ler este JSON com JSON.parse e escrevê-lo com JSON.stringify altera o último dígito de id. Também transforma 1.00 em 1 e 1e3 em 1000. Essas duas mudanças mantêm o valor numérico; a alteração do ID perde o inteiro original.

const source = '{"id":9007199254740993,"price":1.00,"scale":1e3}';
JSON.stringify(JSON.parse(source));
// {"id":9007199254740992,"price":1,"scale":1000}

O maior inteiro seguro de JavaScript Number é 9007199254740991. Nem todo inteiro maior é arredondado, mas inteiros diferentes podem virar o mesmo valor Number. Diferencie a sintaxe numérica do JSON dos limites de precisão de cada analisador.

ECMAScript: Number.MAX_SAFE_INTEGER

RFC 8259 §6: JSON numbers

O ID fictício 9007199254740993 vira 9007199254740992 com JSON.parse e JSON.stringify; o Moyoutil mantém os dígitos originais.
Diagrama original dos resultados de executar a mesma entrada fictícia. Compare o último dígito. Nenhum ID de usuário real foi usado.

Chaves duplicadas: sintaxe válida não garante interoperabilidade

Se mode aparecer duas vezes em um objeto, JSON.parse substitui o valor anterior pelo posterior. RFC 8259 recomenda nomes únicos e explica que programas podem tratar duplicatas de forma diferente. Não suponha que todos os analisadores se comportem igual.

JSON.stringify(JSON.parse('{"mode":"first","mode":"last"}'));
// {"mode":"last"}

RFC 8259 §4: JSON objects

ECMAScript: ParseJSON

O Moyoutil não remove chaves duplicadas automaticamente. Preservá-las não significa recomendá-las. Confira o sistema receptor e o contrato de dados; resolva os nomes duplicados ao criar a fonte.

Validar no Moyoutil mantendo a notação original

formatJSON verifica a sintaxe com JSON.parse, mas monta a saída com os tokens originais, não com o objeto analisado. Preserva inteiros grandes, notação decimal e exponencial, duplicatas e ordem das chaves. A saída pode diferir em bytes: espaços e quebras de linha mudam. Minimizar não remove espaços dentro de strings.

formatJSON('{"id":9007199254740993,"price":1.00,"scale":1e3}', 0).output
// {"id":9007199254740993,"price":1.00,"scale":1e3}

Guarde o original, cole na ferramenta JSON e formate ou minimize. Compare IDs importantes e notação numérica antes de baixar. Editar a entrada apaga o resultado e desativa a cópia; valide novamente. O limite é 2MiB de UTF-8 e 128 níveis de aninhamento.

Validar a sintaxe não verifica regras de negócio, JSON Schema nem a interpretação do servidor. Converter um número em string muda seu tipo e não é uma correção automática. Confira se o contrato permite IDs em texto. Reproduza o problema com dados fictícios, sem chaves secretas reais ou informações pessoais.

Perguntas frequentes

A validação preserva os números em outro servidor?

Não. A ferramenta preserva a notação, mas o servidor que a analisa como números aplica os limites de precisão de seu analisador.

Minimizar JSON cria um ZIP?

Não. Gera texto JSON com menos espaços sintáticos e quebras de linha desnecessários. Não cria um arquivo ZIP.