JSON a clases de Python

Pega un JSON y obtén dataclasses de Python, modelos Pydantic o definiciones TypedDict con anotaciones de tipo completas. Los campos opcionales tienen None por defecto y las claves se convierten a snake_case.

Gratis y privado. Todo funciona en tu navegador y no se sube nada.

Cómo funciona

  1. Pega tu JSONPega una respuesta de tu API o abre un archivo .json. Con Ejemplo ves un caso de muestra.
  2. Ajusta las opcionesIndica el nombre del tipo principal y las opciones de este lenguaje. El código se actualiza mientras escribes.
  3. Copia o descargaCopia el código en tu proyecto o descárgalo como archivo.

Tres estilos para tres usos

Las dataclasses forman parte de la biblioteca estándar y van bien para datos internos. Los modelos Pydantic validan y convierten los datos al cargarlos, y el generador añade Field(alias=...) siempre que el nombre en Python sea distinto de la clave del JSON, así model_validate lee los datos originales. TypedDict solo describe la forma de un diccionario, algo práctico si sigues trabajando con el resultado de json.loads; las claves que no son nombres válidos en Python usan la sintaxis funcional de TypedDict.

Los campos opcionales se mueven al final de cada dataclass, porque Python exige que los campos con valor por defecto vayan después de los demás. Los tipos usan la forma moderna list[...], así que el código necesita Python 3.9 o posterior; NotRequired en TypedDict necesita Python 3.11 o typing_extensions.

Preguntas frecuentes

¿Por qué el código empieza con from __future__ import annotations?

Permite que las clases se refieran unas a otras en cualquier orden y conserva las anotaciones tal como están escritas. Es seguro con dataclasses y con Pydantic 2.

¿Se sube mi JSON a algún sitio?

No. Los tipos se generan en tu navegador. Las respuestas de API con datos de clientes o claves nunca salen de tu dispositivo.

¿Cómo se detectan los campos opcionales?

Si el JSON contiene una lista de objetos, se comparan todos. Un campo que falta en al menos un objeto se marca como opcional. Con un solo objeto, todos los campos se tratan como obligatorios.

¿Qué pasa con los campos que siempre son null?

Con el ejemplo no se puede saber su tipo, así que el campo recibe un tipo general como unknown, object, Any o JsonElement. Añade un ejemplo en el que el campo tenga un valor para obtener un tipo preciso.

¿Por qué mi 1.0 aparece como número decimal?

La herramienta mira cómo está escrito el número. 1.0 o 2.5 pasan a ser double o float, 1 pasa a ser un entero. Si un campo es entero en unos elementos y decimal en otros, se usa el tipo decimal.

¿Puedo usar el resultado en código de producción?

Sí, el código compila tal cual en las configuraciones habituales. Revisa nombres y tipos antes de hacer commit, porque un ejemplo nunca puede mostrar todos los valores posibles.

¿Funciona sin conexión?

Sí. Después de abrir la página una vez, sigue funcionando sin conexión a internet.