Saltar al contenido

Convierte JSON a TypeScript, Go, Python y más

Pega ejemplos de JSON y obtén interfaces de TypeScript, esquemas Zod, structs de Go y tipos de Python, Java, C#, Kotlin, Swift y Rust, generados en tu navegador.

Las muestras múltiples (una tras otra o en JSON Lines) y los objetos dentro de arrays se combinan: las claves que faltan en algún sitio pasan a ser opcionales y los valores null, anulables.

TypeScript
Pega una muestra y pulsa Generar tipos.
Declarar como
Se ejecuta en tu navegador · sin subir archivosCómo funciona

Cómo usar JSON a tipos

  1. 1

    Pega muestras JSON

    Pega una respuesta, un array de registros o varias respuestas una tras otra; el ejemplo muestra dos usuarios combinados.

  2. 2

    Elige el lenguaje

    Elige TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift o Rust, y las opciones de estilo correspondientes.

  3. 3

    Nombra el tipo raíz

    Indica el nombre del tipo de nivel superior, por ejemplo User u OrderResponse.

  4. 4

    Genera y copia

    Pulsa Generar tipos y luego copia el código o descárgalo; si cambias algo, se regenera automáticamente.

Límites y Pro

Gratis y sin registro: 9 lenguajes de salida con 3 estilos de Python, cualquier número de muestras combinadas y archivos de hasta 20 MB, con la generación detenida a los 30 segundos.

Pro quita los anuncios; el generador es el mismo en todos los planes. Ver Pro

Acerca de JSON a tipos

Escribir a mano los tipos de la respuesta de una API es lento y propenso a errores, sobre todo cuando los datos están anidados a tres niveles. Pega una o varias muestras JSON y este generador deduce la estructura y escribe definiciones listas para pegar en nueve variantes: interfaces o alias de tipo de TypeScript, TypeScript con esquemas Zod para validar en tiempo de ejecución, structs de Go con etiquetas json, dataclasses, TypedDicts o modelos Pydantic v2 de Python, records de Java con anotaciones de Jackson, clases de C# para System.Text.Json, data classes de Kotlin para kotlinx.serialization, structs Codable de Swift y structs de Rust para serde.

Una sola muestra rara vez incluye todos los campos, así que el generador combina todas las que le des. Pega varios documentos uno tras otro o en JSON Lines, o bien un array de objetos: una clave que falta en algunos objetos pasa a ser opcional, una clave que a veces es null pasa a ser anulable, un entero que a veces es decimal pasa a ser float, y los valores realmente mixtos se convierten en una unión o en el tipo JSON dinámico del lenguaje. Los objetos anidados reciben tipos con nombre propio (orders se convierte en Order y addresses en Address), y las estructuras idénticas se generan una sola vez y se reutilizan. Los objetos cuyas claves son números, UUID o fechas se convierten en mapas.

Los nombres de los campos se adaptan a la convención de cada lenguaje, y las claves JSON que difieren, como first-name o class, se asocian de nuevo con la anotación, el alias o los CodingKeys adecuados. Se toleran los comentarios y las comas finales en la muestra.

El resultado describe las muestras que proporcionas; el generador no puede conocer campos o valores que tus muestras no contienen, así que revísalo con la documentación de tu API antes de fiarte de él.

Privacidad

Las muestras se analizan y el código se genera mediante un Web Worker en esta pestaña, así que las respuestas de API con datos personales o internos nunca se suben. Las opciones de lenguaje y de nombres se guardan en el almacenamiento local; el JSON que pegas no se conserva.

Características

Combina muchas muestras

Las claves que faltan pasan a ser opcionales y los valores null, anulables, en todas las muestras que pegues.

9 lenguajes

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift y Rust con nombres idiomáticos.

Asignación de claves incluida

Las etiquetas json, los alias, @SerialName, @JsonProperty y CodingKeys conservan los nombres originales del JSON.

JSON a tipos: preguntas frecuentes

¿Cómo decide qué campos son opcionales?
Un campo es opcional cuando al menos uno de los objetos en esa posición no contiene la clave. Si pegas un solo objeto, todos los campos son obligatorios, porque nada indica lo contrario. Pega varias respuestas reales, o un array de registros, para que el generador vea qué claves aparecen y cuáles no. Hacer opcionales todos los campos sirve para datos parciales o de tipo patch.
¿Qué pasa cuando un valor a veces es null?
El campo pasa a ser anulable: string | null en TypeScript, un puntero en Go, str | None en Python, String? en Kotlin y Swift, Option<String> en Rust y un tipo envuelto o anulable en Java y C#. Un campo que es null en todas las muestras no permite deducir ningún tipo, así que se convierte en el tipo desconocido o JSON dinámico del lenguaje.
¿Por qué mis enteros se convirtieron en float?
Si una muestra tiene 7 y otra 7.5 en el mismo campo, el tipo debe admitir ambos, así que pasa a ser float o double. Los números escritos con punto decimal, como 10.0, también cuentan como decimales. En TypeScript ambos son number; con Zod, un campo solo de enteros se comprueba con z.number().int().
¿Es lo mismo que quicktype?
Resuelve el mismo problema con su propio generador, que se ejecuta por completo en tu navegador y añade algunas cosas: tres estilos de Python, incluido TypedDict, esquemas Zod y la combinación de varios documentos pegados. quicktype admite más lenguajes y puede leer JSON Schema. Para los nueve lenguajes de aquí, el resultado está pensado para compilar sin ayudas adicionales en tiempo de ejecución.
¿Puede detectar fechas, enums o UUID?
No. Las cadenas siguen siendo cadenas, porque unas pocas muestras no pueden demostrar que todos los valores futuros serán fechas o pertenecerán a un conjunto fijo. Cambia a mano el tipo generado por Date, time.Time, datetime, un enum o un tipo UUID donde tu API lo garantice. Los objetos con UUID, números o fechas como claves son la excepción: se convierten en mapas.