Generación de tipos

JSON a PythonModelos dataclass y Pydantic

Compara los dos registros: una clave ausente y un null explícito producen valores predeterminados distintos.

JSON a Python

Entrada JSON

El análisis y la generación se realizan en este navegador. La entrada no se sube ni se almacena.

Código generado

Opciones de generación

Python 3.9+. Los metadatos dataclass no decodifican ni validan. Pydantic 2.12.5 incluye load_models(source); úsalo para aplicar la política numérica elegida.

Las muestras del array definen el modelo de elemento Root. load_models de Pydantic acepta un objeto o un array.

2 clases · 2 campos que admiten null

JSON a Python convierte respuestas representativas de una API en un borrador de modelo. Incluye registros con claves diferentes: un único objeto completo no revela qué campos pueden faltar.

Este generador dataclass proporciona anotaciones de tipo para contenedores de la biblioteca estándar. Elige Pydantic BaseModel si necesitas interpretar los datos al cargarlos; las muestras no definen por sí solas las reglas de negocio.

¿Por qué usar JSON a Python?

Distingue ausencia y null

JSON a Python mantiene obligatorio un campo presente en todos los registros aunque admita null. Si una muestra omite la clave, añade None como valor predeterminado. Esto cambia qué argumentos necesita el constructor.

Dos tarjetas de objetos conectan un marcador null y un hueco ausente con distintos valores predeterminados.

Conserva el vínculo con cada clave

Las palabras reservadas, los signos y los métodos del modelo necesitan nombres de atributo seguros. Los metadatos dataclass o los alias Pydantic conservan la escritura original; los sufijos resuelven las colisiones de forma determinista.

Claves irregulares llegan a atributos seguros por rutas separadas de metadatos y alias validados.

Define cómo se cargarán los datos

01

Aporta registros con diferencias

Admite un objeto o un array no vacío de objetos. Los objetos de cada posición de array anidado contribuyen al mismo modelo de elemento; las diferencias entre muestras revelan claves ausentes.

02

Revisa las decisiones predeterminadas

El modo de claves ausentes añade None solo donde falta una clave. El modo totalmente opcional permite omitir cualquier campo. Las fechas siguen siendo str salvo que actives ISO. Decimal afecta a grupos numéricos que contienen decimales o exponentes.

03

Exporta un resultado actualizado

La generación espera 350 ms después de editar. Desactiva el modo automático para usar Generar o Ctrl/Cmd+Enter. Los cambios bloquean la exportación inmediatamente. Vaciar y Ejemplo guardan una instantánea de entrada, opciones y código para deshacer.

Tipos y comportamiento del archivo

Dos frameworks, un archivo

La salida dataclass de JSON a Python usa solo la biblioteca estándar y coloca los campos obligatorios antes de los que tienen valor predeterminado. La opción Pydantic apunta a 2.12.5. Las clases hijas se declaran antes que sus padres para permitir importar el archivo en Python 3.9.

Elige la política numérica

Los grupos de enteros puros usan int de precisión arbitraria. Si contienen decimales o exponentes, usan float por defecto, incluidos los enteros grandes del grupo, que pueden redondearse. Decimal conserva esos grupos y el cargador analiza decimales sin pasar por float, incluso dentro de contenedores Any.

Reconoce fechas con cautela

ISO reconoce fechas válidas y marcas de tiempo completas con zona horaria y hasta seis cifras de fracción de segundo. Todas las cadenas no nulas de una posición deben coincidir en el tipo de fecha. Fechas inválidas, horas sin zona o mayor precisión permanecen str. Pydantic convierte las cadenas reconocidas; dataclass no.

Atributos seguros y alias

Los campos pasan a ASCII snake_case. Se renombran palabras reservadas, guiones bajos iniciales, nombres model_* y métodos BaseModel. Claves vacías, Unicode y controles conservan alias. Los módulos importados usan alias privados para evitar conflictos con clases llamadas Decimal o BaseModel.

Qué garantiza el código generado

Una dataclass es un contenedor
Las anotaciones y los metadatos json_key no validan, no renombran claves entrantes ni construyen objetos anidados o fechas. Debes crear las instancias explícitamente. Pasar un dict anidado deja un dict; asdict usa atributos Python, no los alias guardados en metadatos.
Utiliza el cargador Pydantic
Instala pydantic==2.12.5 y llama a load_models(source). Aplica json.loads con la política float/Decimal antes de model_validate y devuelve una instancia o lista. model_validate_json directamente no ofrece la garantía Decimal del cargador. La serialización Decimal suele producir cadenas JSON.
Validación con límites concretos
Pydantic acepta solo los alias JSON originales y rechaza propiedades desconocidas con extra="forbid". Optional[T] permite null; un valor predeterminado permite omitir el campo. Los ausentes valen None, por lo que debes consultar model_fields_set para distinguir ausencia y null. Se aplica la coerción normal, no una validación estricta del negocio.
Las muestras ambiguas usan tipos amplios
Tipos incompatibles y campos solo null usan Any; arrays vacíos, List[Any]; objetos anidados vacíos, Dict[str, Any]. No genera enumeraciones, UUID, EmailStr, TypedDict, JSON Schema, OpenAPI ni ORM. Rechaza escalares raíz, arrays raíz vacíos y arrays raíz mezclados.
Alias y rango pueden causar errores
Sin alias se rechaza cualquier clave que necesite renombrarse. Ambos frameworks rechazan sustitutos Unicode sin pareja en claves. float rechaza desbordamientos y decimales no nulos que caerían a cero, pero no garantiza precisión decimal. Para cantidades decimales exactas, selecciona Decimal.
Entrada estricta y acotada
No hay comentarios, comas finales, claves duplicadas, reparación, importación de archivos, descarga de URL ni ejecución de Python. Límites: 500.000 caracteres de entrada, 50.000 nodos, profundidad 40, 100 campos por objeto combinado, 200 clases, 1.000 caracteres por clave o número, magnitud de exponente 10.000 y 1.000.000 caracteres de salida.

Preguntas sobre JSON a Python

¿Se pueden generar modelos Pydantic en vez de dataclasses?

Sí. JSON a Python permite elegir Pydantic 2.12.5 y genera subclases BaseModel con alias y validación de campos desconocidos. Usa load_models para construir las instancias anidadas y aplicar la política numérica seleccionada.

¿Qué información de tipo aporta un valor null?

null indica que el campo admite un valor nulo, pero no revela otro tipo. Un campo observado solo como null usa Any; si aparecen valores compatibles no nulos, se obtiene Optional[T]. Eso no hace que pueda omitirse sin valor predeterminado.

¿Qué clases se crean para los objetos anidados?

Un objeto anidado no vacío produce una clase auxiliar dentro del mismo archivo. Las clases hijas aparecen primero. Un objeto anidado vacío usa Dict[str, Any], porque la muestra no aporta campos que modelar.

¿Cómo se decide el tipo de los elementos de un array?

Se combinan todos los elementos de la posición correspondiente. Los objetos aportan sus campos al modelo común; tipos incompatibles producen Any y arrays vacíos List[Any]. El array raíz debe ser no vacío y contener solo objetos.

¿Qué ocurre al introducir JSON mal formado?

El generador detiene la operación e informa del error, con ubicación cuando está disponible. No repara comentarios, comas finales ni claves duplicadas. El código anterior no puede exportarse como resultado vigente después de cambiar la entrada.

¿Has encontrado una inferencia mejorable?

Comprueba el modelo con registros reales

Prueba JSON a Python con claves ausentes, null y números representativos; después comprueba el código exportado con las reglas de carga de tu aplicación.