Genera TypedDict de Python desde ejemplos JSON completos
Infiere declaraciones TypedDict localmente, conserva las claves exactas y distingue campos ausentes de None.
Espacio de trabajo de la herramienta
JSON a Python
Declaraciones TypedDict para Python 3.11+; sólo biblioteca estándar.
NotRequired expresa una clave ausente; None expresa null. TypedDict no valida datos al ejecutarse. Los lexemas enteros usan int; los decimales o con exponente usan float, que puede aproximar números.
Activa JavaScript para generar código. Puedes leer y editar el JSON.
Este navegador no puede iniciar el Worker local. La generación no está disponible.
Todos los elementos y documentos aportan al mismo contrato. Un array raíz sigue siendo un array. La ausencia de un campo es distinta de null.
Hasta 20 documentos, 1.000.000 de unidades UTF-16 de entrada y 2.000.000 de salida; también se aplican otros presupuestos de recursos.
Tu JSON se procesa localmente en un Worker del navegador. No se envía ni se guarda.
Al cambiar a un documento se conserva sólo el ejemplo activo. Confirma o cancela.
Usa entre 1 y 64 letras y dígitos ASCII; comienza por una letra. Los nombres reservados se rechazan.
Listo para introducir JSON.
Se omiten algunos detalles de diagnóstico. Los totales de avisos siguen visibles.
Detalle de nombres
El portapapeles no está disponible o se denegó el permiso. Descarga el archivo o abre explícitamente el código completo para copiarlo. Un archivo grande puede tardar en mostrarse.
Documentos completos y todos los elementos
Pega JSON estricto o abre un archivo UTF-8 local. Genera por acción explícita desde un documento o hasta veinte ejemplos completos del mismo contrato. Participan todos los elementos y documentos, también las propiedades del último registro. Un array raíz sigue siendo un array. Ejemplos vacíos, claves decodificadas duplicadas, comentarios, comas finales y documentos concatenados detienen la generación y conservan la entrada.
El editor muestra el ejemplo activo y el total. Después de generar, revisa el nombre del archivo, la expresión del tipo raíz, los nodos JSON y el tamaño del código completo. Estos datos describen el resultado vigente; copiar y descargar incluyen todo el archivo aunque la vista previa esté acotada.
[{"id":1},{"id":2,"nombre":"Ana"}]
from typing import NotRequired, TypeAlias, TypedDict
RootItem = TypedDict("RootItem", {
"id": int,
"nombre": NotRequired[str],
})
Root: TypeAlias = list[RootItem]
Presencia, None y claves exactas
NotRequired[T] indica que la clave faltó en algunos objetos de su contexto; T | None indica un null observado. Para [{"x":null},{"x":"a"},{}], el campo es NotRequired[str | None]. Un campo requerido exclusivamente null usa None; si es opcional usa NotRequired[None]. La ausencia no añade None ni valores predeterminados. Los objetos de propiedades distintas conservan contratos separados.
La sintaxis funcional de TypedDict preserva claves como class, a-b, la cadena vacía, comillas, emoji y escapes de sustitutos aislados; sólo los identificadores del código se ajustan ante colisiones. Las dependencias se declaran antes de utilizarse. Se requiere Python 3.11+ y sólo su biblioteca estándar. TypedDict describe diccionarios ordinarios: no valida JSON ni impone claves requeridas al ejecutarse. No se generan deserializadores, dataclasses, modelos Pydantic, fechas ni enums.
La raíz [1,"x",null] produce list[int | str | None]; [null] usa list[None], [] usa list[object] con aviso y {} usa dict[str, object] por falta de campos observados. El alias raíz null utiliza types.NoneType. Las raíces primitivas y uniones tienen alias TypeAlias.
Números y exportación local completa
Los lexemas exclusivamente enteros usan int, incluidos los que exceden el rango seguro de JavaScript. Un punto o exponente selecciona float, también al mezclar enteros y decimales. El aviso de precisión del parser permanece aunque int pueda representar el número original; float avisa si la evidencia muestra pérdida de precisión. El entero -0 genera aviso porque int normaliza su signo. La salida no contiene valores de las muestras ni conversiones.
Límites: 20 muestras, 1.000.000 unidades UTF-16 de entrada, 4.000.000 bytes UTF-8 agregados y por archivo, profundidad 200, 100.000 nodos, 1.000.000 unidades de parseo, 100.000 visitas de inferencia, 10.000 tipos, 20.000 campos, 2.000.000 unidades de fusión, 2.000 declaraciones y 4.000.000 unidades de emisión. La salida permite 2.000.000 unidades UTF-16 y 8.000.000 bytes. Los máximos no necesariamente se alcanzan juntos; la operación vence a los 15 segundos sin código parcial.
La vista previa contiene hasta 20.000 unidades UTF-16; copiar y descargar incluyen todo el types.py vigente, UTF-8 sin BOM, LF y salto final, con MIME text/plain;charset=utf-8. Se muestran hasta 100 detalles de diagnóstico y 50 filas de nombres que suman 10.000 unidades, con conteos omitidos. Si el portapapeles falla se ofrece copia manual explícita del código completo. Se retira un BOM inicial al parsear; las posiciones corresponden al documento visible original. Cancelar termina el Worker y conserva todos los ejemplos. Editar, cambiar opciones, orden o modo invalida salida y exportación.
El procesamiento ocurre en un Worker local, sin cargas remotas, almacenamiento ni datos en enlaces. Se requieren JavaScript y soporte de Worker. La página nunca importa, compila ni ejecuta el Python generado.