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
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"}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.