Ir al contenido
Toova
Todas las herramientas

JSON a TypeScript, Go, Python, PHP, Rust

Privacidad por diseño — se ejecuta completamente en tu navegador

Inferir las definiciones de tipos correctas a partir de una respuesta de API real es de esas tareas que deberían tomar cinco segundos pero terminan en quince minutos. Esta herramienta lee una muestra de JSON en tu navegador, recorre la estructura y emite tipos idiomáticos para TypeScript, Go, Python, PHP o Rust — con campos opcionales, detección de fechas ISO y distinción correcta entre entero y flotante.

Cómo funciona la inferencia

La herramienta recorre el árbol JSON una sola vez, construyendo una representación intermedia: los primitivos pasan a string / int / float / bool / null, los arrays infieren el tipo del elemento a partir de la unión de sus miembros, y los objetos producen un struct donde cada campo hereda el tipo del valor. Cuando un campo aparece en algunos elementos del array y en otros no, se marca como opcional — el tipo generado puede decodificar datos parciales sin romperse. Los números sin parte fraccionaria se emiten como int64 (Go) / int (Python) / i64 (Rust), y los que la tienen como float64 / float / f64. Las cadenas con formato ISO 8601 (`2024-03-15T10:30:00Z`) pasan a Date / time.Time / datetime / DateTimeInterface / chrono::DateTime.

Estilo de salida por lenguaje

Cada emisor sigue la convención de su lenguaje destino. TypeScript: interfaces exportadas con sintaxis `?:`. Go: structs con tags `json:`, opcionales como puntero con `omitempty`. Python: `@dataclass` con campos requeridos primero y `Optional[T] = None` al final (regla de orden del dataclass). PHP: clases final con tipos estrictos y pistas `@var list<T>` para arrays tipados. Rust: structs con `#[derive(Serialize, Deserialize)]`, `Option<T>` para campos nulos y `#[serde(rename)]` cuando el nombre en snake_case difiere de la clave JSON.

Cuándo usarlo (y cuándo no)

El generador resuelve el primer 80% del trabajo: llegar a una definición funcional de tipos en segundos a partir de un payload. No reemplaza un schema escrito a mano cuando necesitas restricciones precisas (regex en cadenas, min/max en números, uniones discriminadas). Para esos casos, usa la salida como punto de partida y ajusta los tipos. La detección de opcionales es heurística — basada en lo presente en tu muestra — pasa varias muestras diversas si puedes.

Preguntas frecuentes

¿El JSON que pego sale de mi navegador?
No. Parser, inferencia y generación corren en JavaScript dentro de tu pestaña. Abre el panel Red mientras generas — cero peticiones salientes. Seguro para payloads de producción con tokens reales y PII.
¿Por qué mi campo aparece opcional si siempre tiene valor?
La marca de opcional se activa cuando un array contiene objetos con el campo y otros sin él. Si pegas un solo objeto, nada se marca opcional. Si pegas un array de objetos idénticos, tampoco. La marca solo se activa cuando la estructura dentro del array varía.
¿Cómo distingue entero y flotante?
JSON tiene un solo tipo numérico. La herramienta inspecciona cada valor y emite int cuando no tiene parte fraccionaria (`42`, `1000`) y float cuando sí (`3.14`, `99.0`). Si un array mezcla ambos, el tipo se amplía a float para evitar decodificación con pérdida.
¿Detecta cadenas de fecha ISO?
Sí. Las cadenas con patrón `YYYY-MM-DD` o `YYYY-MM-DDTHH:MM:SS[.sss][Z|±HH:MM]` se emiten como el tipo nativo de fecha/hora del lenguaje (Date en TS, time.Time en Go, datetime en Python, DateTimeInterface en PHP, chrono::DateTime en Rust). Otros formatos quedan como string.
¿Necesito instalar algo para usar el código generado?
TypeScript: nada, es puro. Go: solo la biblioteca estándar (time.Time cuando hay fechas ISO). Python: módulo dataclasses estándar. PHP: tipos nativos. Rust: requiere serde + chrono si hay fechas ISO. Los imports/cabecera salen en la propia salida cuando corresponda.
¿Puedo generar tipos para un array de objetos en la raíz?
Sí. Si la raíz es un array de objetos, la herramienta emite un struct para el elemento y un alias de tipo al inicio para el array. Por ejemplo, un JSON `[{...}, {...}]` llamado `Users` produce `User` + `type Users = User[];` en TypeScript, o `pub type Users = Vec<User>;` en Rust.