Generador de structs JSON a TypeScript / Go / Rust

Pega JSON, elige el idioma objetivo, obtén una definición de tipo idiomática. Soporta TypeScript, Go, Rust, Kotlin, Java, C# y Python TypedDict. Basado en quicktype, en el navegador.

  1. Pega una muestra JSON representativa en el área de texto izquierda.
  2. Elige el idioma objetivo del desplegable Objetivo.
  3. Haz clic en Generar. La primera carga el motor (~2–3 segundos en una conexión 4G); las siguientes son instantáneas.
  4. Copia el resultado o descárgalo con la extensión de archivo correcta.
¿Qué hace?

Genera tipos idiomáticos en tu idioma objetivo infiriendo el esquema de una o más muestras JSON. Los tipos de campo se infieren — las cadenas siguen siendo cadenas, los números se vuelven el tipo numérico del idioma, los booleanos se vuelven bool, los arrays se vuelven slices/listas/arrays, los objetos anidados se vuelven tipos anidados. Los campos opcionales (los que a veces son null o faltan entre muestras) se marcan como nullables en la salida. Basado en quicktype-core, el mismo motor detrás de quicktype.io.

Ejemplo

Entrada JSON:

{
  "name": "Ada",
  "age": 36,
  "active": true,
  "tags": ["math", "logic"]
}

Salida TypeScript (objetivo = TypeScript, nombre del tipo = User):

export interface User {
  name: string;
  age: number;
  active: boolean;
  tags: string[];
}

Trampas comunes y cómo manejarlas

La inferencia de tipos desde JSON tiene límites fundamentales — JSON no lleva suficiente información para restringir totalmente un sistema de tipos. Los patrones siguientes cubren cuándo el tipo inferido puede no coincidir con lo que quieres.

  • Opcional vs. requerido desde una sola muestra. Un solo objeto JSON no puede decirle al generador qué campos son opcionales. Provee múltiples muestras (pega un array JSON de objetos representativos) para que el generador pueda marcar campos a veces faltantes como opcionales.
  • Arrays vacíos. `{"items": []}` produce un array de `any` — el generador no tiene elemento del cual inferir. Incluye al menos un ejemplo poblado, o arregla el tipo a mano tras la generación.
  • Elementos de array heterogéneos. Un array JSON `[1, "two"]` se vuelve un tipo unión — el resultado puede no ser ergonómico en algunos idiomas objetivo (Go en especial). Si el array debe ser homogéneo en tus datos reales, arregla la muestra.
  • Cadenas de fecha. JSON no tiene tipo Date. Las cadenas de fecha ISO 8601 se infieren como `string`. quicktype a veces puede detectarlas como Date en la salida TypeScript — ajusta a mano si quieres tipado más fuerte.
  • IDs numéricos que pierden precisión. Los números JSON > 2^53 (IDs de 64 bits grandes) pierden precisión cuando son parseados por JavaScript. El tipo TypeScript generado usa `number` de todos modos. Para precisión de 64 bits, usa `string` en tu JSON o migra a un tipo `bigint` a mano.
  • Campos con guion bajo vs. camelCase. El generador preserva el naming de los campos JSON. Si tu JSON usa snake_case pero el idioma objetivo espera camelCase, la salida usa campos snake_case con anotaciones serde/json donde aplique. Sobrescribe post-procesando o usando flags del CLI de quicktype.
Preguntas frecuentes

¿Por qué la primera Generación es lenta?

El bundle del motor quicktype tiene aproximadamente 465 KB gzipped. Carga en el primer clic en Generar, lo que toma 2–3 segundos en una conexión 4G. Después el módulo queda cacheado por el resto de la sesión de la página — y el navegador lo cachea entre visitas, así que los primeros clics subsiguientes también son instantáneos a menos que el caché se haya limpiado.

¿Puedo generar desde múltiples muestras JSON?

Envuelve tus muestras en un array JSON y pega el array. El generador infiere la unión de campos vistos entre muestras y marca campos como opcionales cuando faltan en al menos una. Esta es la forma correcta de asegurar que tus tipos generados toleren la variación en datos reales.

¿Qué idioma debería elegir para código backend?

Coincide con lo que ya usa tu proyecto. La salida Go usa tags de struct estándar para `encoding/json`. Rust usa serde derives. Kotlin usa anotaciones kotlinx.serialization. Java produce POJOs compatibles con Jackson. La elección es específica del proyecto, no basada en preferencia.

¿Se preservan los comentarios de los campos?

JSON no tiene sintaxis de comentarios, así que no hay comentarios en la entrada para llevar. quicktype puede incluir doc comments en la salida para algunos idiomas — son descripciones auto-generadas, no contenido del usuario.

¿Mi JSON se sube?

No. Todo se ejecuta en tu navegador — tu entrada se procesa localmente por el módulo JavaScript quicktype-core en esta página. quicktype-core mismo carga desde el mismo origen (host de assets estáticos de este sitio); ningún servidor de terceros ve tus datos.

¿Qué tan grande puede ser la muestra JSON?

Hasta unos 5 MB de JSON antes de que el generador empiece a tomar tiempo notable. El generador está diseñado para muestras representativas, no datasets completos — típicamente un puñado de objetos basta para inferir un esquema limpio.