Saltar al contenido
4all.tools

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.

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.

Usa entre 1 y 64 letras y dígitos ASCII; comienza por una letra. Los nombres reservados se rechazan.

Listo para introducir JSON.

    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.