JSON a TypeScript / Go / Rust
Pega cualquier muestra JSON. Recibe interfaces TypeScript limpias, structs Go o tipos Rust con tags serde — rápido, ligero y listo para pegar en tu código.
Qué hace este conversor
Recorre una muestra JSON, infiere un tipo para cada valor y emite una definición de tipo idiomática en el lenguaje que elijas. Los objetos se vuelven interfaces (TypeScript), structs (Go, Rust), y los objetos anidados producen definiciones de tipo hermanas. Los arrays de objetos unifican sus shapes de elemento — campos presentes en algunos ítems pero no en otros se marcan opcionales, y valores primitivos que varían (string en algunos ítems, integer en otros) colapsan en una unión o en serde_json::Value en Rust. Ningún dato se envía a ninguna parte — todo el inferrer corre en tu navegador.
Cómo usar
Pega un payload JSON representativo (idealmente un registro de la respuesta de tu API), elige el lenguaje destino y copia el resultado. Si tu JSON tiene múltiples instancias del mismo shape (una lista paginada, por ejemplo), incluye el array — el inferrer aprende más con la varianza. El toggle de casing renombra los campos en la salida sin tocar las llaves del JSON; en Go y Rust la llave original se preserva como tag de struct, así la serialización hace round-trip.
Tips y trampas
- Opcional vs nullable: un campo faltante en algunos registros se vuelve
?/Option<T>, pero un campo presente en todos lados con valor literalnullse vuelve unión connull— son distintos y se infieren por separado. - Números: los integers permanecen integers en Go y Rust (
int64,i64); los floats se vuelvenfloat64/f64. TypeScript colapsa ambos anumberporque el lenguaje no distingue. - Arrays vacíos:
[]infiere aunknown[]/[]interface{}/Vec<serde_json::Value>— agrega un ítem de muestra para conseguir un tipo real. - Renombrado de campos: solo el inferrer renombra. Tu parser JSON aún necesita mapear las llaves — Go usa el tag
json:, Rust usa#[serde(rename = ...)].
Preguntas frecuentes
¿Cómo maneja arrays de tipos mixtos?
[1, 2, "x"], el tipo del elemento se vuelve number | string. Si contiene [{a: 1}, {a: 1, b: 2}], el elemento se vuelve un tipo objeto con a requerido y b opcional. En Go y Rust donde las uniones no tienen equivalente limpio, los primitivos mixtos colapsan a interface{} / serde_json::Value.¿Maneja estructuras profundamente anidadas?
¿Por qué mis nombres de campo Go están en PascalCase aunque elegí preservar?
encoding/json. La llave original del JSON se preserva en el tag json:, así la serialización aún produce el casing de entrada.¿En qué se diferencia de los generadores de código más pesados?
¿Mi salida compilará?
use serde::{Deserialize, Serialize}; para Rust ya viene incluido; encoding/json en Go es implícito). Si las llaves de tu JSON colisionan con palabras reservadas tras renombrar, Rust usa identificadores raw r# automáticamente.¿Algo se envía a un servidor?
JSON.parse del navegador y el inferrer es una pequeña función recursiva en esta página. Abre DevTools > Network y no verás ninguna petición mientras escribes. Seguro para payloads de producción, respuestas de API internas y cualquier cosa que no pegarías en un SaaS hospedado.
EN
PT
ES