Bases de datos y SQL

JSON extendidocon los tipos a la vista

Convierte EJSON estricto entre Canonical y Relaxed y revisa las advertencias de precisión.

JSON extendido

Examinar ObjectId

Entrada EJSON

Resultado JSON

El texto se procesa en este navegador, sin conexión a una base de datos ni envío del documento.

Salida e interpretación

Un único valor JSON estricto. Se rechazan expresiones de shell, comentarios y claves repetidas.

Los enteros sin envoltura se interpretan como Int32/Int64; las formas decimales o exponenciales, como Double. Las cadenas no cambian de tipo.

Límites: 500.000 unidades UTF-16, profundidad 100, 50.000 nodos y 2.000.000 de caracteres de salida.

Cambió la entrada o una opción. Convierte de nuevo antes de exportar.

El JSON extendido aparece en documentos exportados con $oid, $date o $numberDecimal. Esas envolturas indican tipos de BSON; quitarlas solo para simplificar la lectura cambia lo que podrá reconstruir la aplicación que reciba el documento.

El ejemplo incluye un número de secuencia mayor que el límite seguro de JavaScript. Comprueba por separado si conserva sus dígitos y si sigue indicando su tipo. La conversión genera otra salida sin reemplazar el texto de entrada.

Por qué usar JSON extendido

Entiende qué cambia antes de enviar el documento a otro sistema.

Conservar las envolturas necesarias

El JSON extendido empieza en modo canónico. El modo relajado simplifica números finitos y fechas compatibles, pero mantiene ObjectId y Decimal128 con su tipo. La vista paralela permite comprobar los cambios sin tocar el original.

Tres filas de datos tipados: se abre la envoltura numérica y permanecen las de identificador y decimal

Mantener todos los dígitos de Int64

Un Long como 9007199254740993 se escribe desde su entero exacto. La advertencia explica que un consumidor basado en JavaScript Number todavía puede redondearlo. Un texto exacto y una lectura exacta son dos requisitos distintos.

Una secuencia completa de bloques numéricos cruza un documento junto a un símbolo de advertencia

Ajustar la salida al programa receptor

01

Pegar datos, no instrucciones de shell

ObjectId() e ISODate() no forman parte de JSON. Exporta primero sus envolturas $oid y $date. Se acepta un documento, un array o un valor individual.

  • Ejemplo y Limpiar muestran una vista previa; tras aplicar, Deshacer restaura una vez la entrada y la salida.
02

Revisar el tipo después de cambiar de modo

Usa Canonical si necesitas tipos explícitos. Relaxed facilita la lectura; antes de convertir BSON y copiar su representación, comprueba las advertencias.

  • Cambiar el modo o la sangría bloquea inmediatamente la exportación del resultado anterior.
03

Elegir cuándo ejecutar

La conversión automática espera 350 ms desde la última edición. Desactivarla cancela el trabajo pendiente y muestra el botón de conversión.

  • Ctrl/Cmd + Intro también ejecuta la entrada actual. Copiar y descargar incluyen el resultado completo.

Tipos y valores con reglas explícitas

Un conjunto BSON definido

Se validan ObjectId, Decimal128, Int32, Int64, Double, fechas, Binary, UUID, expresiones regulares, Timestamp y MinKey/MaxKey. UUID se normaliza a una envoltura binaria de subtipo 04. Se ordenan las opciones de las expresiones regulares sin ejecutar el patrón.

Fechas más allá de JavaScript Date

Canonical conserva milisegundos con signo de 64 bits como cadenas, incluso fuera del intervalo de Date. Relaxed escribe UTC ISO solo entre 1970 y 9999. Las fechas restantes mantienen su envoltura de milisegundos, sin recortar el año.

Las cadenas no se interpretan por apariencia

Los enteros desnudos se infieren como Int32 o Int64 según su tamaño; los decimales y exponentes, como Double. Una escritura decimal larga puede redondearse a precisión binaria de 64 bits. Una cadena parecida a una fecha o un ID sigue siendo una cadena.

Sintaxis aceptada y límites

Un subconjunto estricto de v2
No se ejecuta shell ni se repara sintaxis. Se rechazan v1, Code/Scope, DBPointer, Undefined y Symbol. Los campos ordinarios desconocidos se conservan, pero una envoltura reconocida debe tener exactamente la estructura esperada.
Sin eliminación global de etiquetas
Relaxed sigue siendo EJSON. No se borra toda clave que empiece por dólar ni se fuerza Decimal128 a Number. Elegir Canonical no recupera con certeza la información de tipo que ya faltaba en la entrada.
Un valor JSON por conversión
No se admiten JSONL, documentos concatenados, BSON binario, contenedores Hex/Base64, mongodump ni archivos subidos. Procesa un documento o prepara un array. No hay conexión a bases de datos ni importación de colecciones.
Presupuestos de tamaño y rango
Hasta 500.000 unidades UTF-16, 100 niveles, 50.000 nodos y 2.000.000 de caracteres de salida. El desbordamiento de Int64, las fechas inválidas y las claves duplicadas detienen toda la conversión, sin exportar resultados parciales.
Normalizar no es copiar los bytes
Pueden cambiar espacios y formas de fecha. Decimal128 y las expresiones regulares siguen el motor oficial; los flotantes siguen precisión binaria. Después de editar, la exportación queda bloqueada hasta obtener un resultado nuevo válido.

Preguntas sobre JSON extendido

¿Qué diferencia hay entre Canonical y Relaxed?

Canonical prioriza los tipos BSON y envuelve también los números. Relaxed escribe números finitos y fechas compatibles de forma más legible. Ambos son texto JSON válido; ObjectId y Decimal128 siguen envueltos en los dos modos.

¿Puedo pegar directamente la salida de mongosh?

Solo si ya es JSON/EJSON estricto. ObjectId("…"), ISODate("…") y NumberLong("…") son expresiones de shell que se rechazan. Primero exporta o serializa el documento como Extended JSON; el texto pegado nunca se ejecuta.

¿Por qué NumberLong aparece como cadena?

En Canonical, la cadena dentro de $numberLong protege los dígitos frente al redondeo de un lector JSON común. Aquí Relaxed escribe el literal entero completo. Para valores grandes, el programa receptor aún necesita un analizador numérico sin pérdida.

¿Por qué no usar un número normal para Decimal128?

JavaScript Number utiliza precisión binaria de 64 bits, distinta de la precisión decimal de Decimal128. La cadena $numberDecimal conserva la representación y el tipo, por eso permanece también al usar Relaxed.

¿Se puede convertir un archivo mongoexport completo?

Solo si contiene un único valor JSON dentro de los límites, como un array. La salida habitual con un documento por línea es JSONL y no se acepta. Procesa documentos individuales o usa una opción de exportación que genere un array.

¿Encontraste un caso inesperado?

Comprobar tipos antes de copiar

Vuelve a JSON extendido, elige la representación de destino y revisa la precisión antes de guardar el resultado.