Por qué 9007199254740993 se convierte en otro ID

Leer este JSON con JSON.parse y escribirlo con JSON.stringify cambia el último dígito de id. También convierte 1.00 en 1 y 1e3 en 1000. Estos dos cambios conservan el valor numérico; el cambio del ID pierde el entero original.

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

El máximo entero seguro de JavaScript Number es 9007199254740991. No todos los enteros mayores se redondean, pero enteros distintos pueden convertirse en el mismo valor Number. Distingue la sintaxis numérica de JSON de los límites de precisión de cada analizador.

ECMAScript: Number.MAX_SAFE_INTEGER

RFC 8259 §6: JSON numbers

El ID ficticio 9007199254740993 pasa a 9007199254740992 con JSON.parse y JSON.stringify; Moyoutil conserva los dígitos originales.
Diagrama original de resultados obtenidos al ejecutar el mismo dato ficticio. Compara el último dígito. No se usaron IDs de usuarios reales.

Claves duplicadas: sintaxis válida no implica interoperabilidad

Si mode aparece dos veces en un objeto, JSON.parse sustituye el valor anterior por el posterior. RFC 8259 recomienda nombres únicos y explica que distintos programas pueden tratar los duplicados de forma diferente. No supongas que todos los analizadores actúan igual.

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

RFC 8259 §4: JSON objects

ECMAScript: ParseJSON

Moyoutil no elimina automáticamente las claves duplicadas. Conservarlas no significa recomendarlas. Revisa el sistema receptor y el contrato de datos, y resuelve los nombres duplicados al crear el original.

Validar con Moyoutil sin cambiar la notación original

formatJSON comprueba la sintaxis con JSON.parse, pero crea la salida a partir de los tokens originales, no del objeto analizado. Conserva enteros grandes, notación decimal y exponencial, claves duplicadas y su orden. La salida puede diferir en bytes: cambian espacios y saltos de línea. Minimizar no elimina espacios dentro de las cadenas.

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

Guarda el original, pégalo en la herramienta JSON y formatea o minimiza. Compara los IDs importantes y la notación numérica antes de descargar. Editar la entrada borra el resultado y desactiva la copia; valida otra vez. La entrada admite hasta 2MiB en UTF-8 y 128 niveles de anidamiento.

Validar la sintaxis no comprueba reglas de negocio, JSON Schema ni la interpretación del servidor. Convertir un número en cadena cambia el tipo y no es una solución automática. Confirma primero si el contrato permite IDs de texto. Reproduce el problema con datos ficticios, sin claves secretas reales ni información personal.

Preguntas frecuentes

¿La validación garantiza conservar los números en otro servidor?

No. La herramienta conserva la notación, pero el servidor que la analiza como números aplica los límites de precisión de su analizador.

¿Minimizar JSON crea un ZIP?

No. Genera texto JSON con menos espacios sintácticos y saltos de línea innecesarios. No crea un archivo ZIP.