JSON a TypeScript / Go / Java / Rust
FormatoTodo se ejecuta en tu navegador: no se sube nada
Pega una muestra de JSON y obtén definiciones de tipo listas para pegar en tu proyecto. No se limita a copiar los nombres de las claves: una clave que toma tipos distintos en distintos elementos del array se ensancha a una unión (o a interface{} / Object / serde_json::Value en los lenguajes que no la tienen), las claves que solo aparecen en algunos elementos se marcan como opcionales, y los objetos anidados con la misma forma comparten una sola declaración en vez de producir un muro de duplicados casi idénticos. Los nombres de campo se convierten a la convención de cada lenguaje y la clave original se conserva mediante el json tag o el serde rename.
Funciones
- La salida va con resaltado de sintaxis en los cuatro destinos, siguiendo el target elegido
- Cuatro destinos: interface de TypeScript, struct de Go, clase de Java y struct de Rust
- Las claves ausentes en algunos elementos se vuelven opcionales: ? en TypeScript, punteros con omitempty en Go, Option en Rust
- Tipos en conflicto en la misma posición se ensanchan a una unión, en vez de elegir uno en silencio
- Los objetos anidados con la misma forma comparten un tipo; solo los choques de nombre reales llevan sufijo numérico
- Los nombres de campo siguen cada convención: nombres exportados de Go con json tags, camelCase en Java, snake_case más serde rename en Rust
- Las claves no habituales se tratan por lenguaje: entrecomilladas en TypeScript, renombradas con la clave original conservada en Go, Java y Rust
- En Go, si una clave lleva una comilla invertida, el tag pasa a la forma con comillas dobles, que si no rompería el struct tag
- En Java solo la clase raíz es public, así que toda la salida cabe en un mismo archivo
- Un anidamiento de más de 64 niveles degrada a un tipo cualquiera en vez de generar tipos ilegibles
- El nombre del tipo raíz es configurable; si no es un identificador válido se normaliza
Cómo se usa
- Pega una muestra de JSON que cubra cuantas ramas puedas
- Elige el lenguaje de destino
- Escribe el nombre del tipo raíz y decide si los campos anulables deben ser opcionales
- Pulsa Ctrl/⌘ + Enter o haz clic en «Ejecutar», y luego en «Copiar»
Preguntas frecuentes
- ¿Son exactos los tipos generados?
- Tan exactos como tu muestra. Cuando una clave solo toma una clase de valor, la herramienta no distingue un caso puntual de una regla, así que incluye los casos incómodos: null junto a un valor, un entero junto a un decimal y varios elementos del array con formas distintas. Relajar a mano un tipo generado sigue siendo mucho más rápido que escribirlo desde cero.
- ¿Por qué algunos campos llevan un signo de interrogación o un puntero?
- Porque la clave faltaba en algunos elementos del array o era null en la muestra. Apaga el interruptor de campos opcionales y todo saldrá como obligatorio, aunque puede que ya no encaje con las respuestas reales.
- ¿Qué pasa con los valores null?
- En TypeScript el tipo se ensancha para incluir null, más un ? si los campos opcionales están activados. Go usa un puntero, Rust un Option y Java un tipo envoltorio como Integer o Boolean.
- ¿Se envía mi JSON a algún sitio?
- No. El análisis, la inferencia de tipos y la generación de código ocurren en la memoria de tu navegador. La página no hace ninguna petición y sigue funcionando sin conexión.
Herramientas relacionadas
Formateador JSON
FormatoFormatea, valida y repara JSON en línea: árbol plegable, búsqueda de claves y valores, edición nodo a nodo y errores con línea y columna.
Datos de prueba
GeneradoresDescribe tus campos y obtén registros de prueba realistas en JSON, CSV, TSV, SQL, XML, YAML o TOML. Todo en tu navegador.
Formateador SQL
FormatoFormatea SQL en línea: una cláusula por línea, palabras clave con el mismo estilo y subconsultas sangradas. El minificador quita los comentarios.
Conversor JSON5
FormatoPasa JSON5 a JSON estricto: comentarios, claves sin comillas, comillas simples, comas finales, hexadecimal e Infinity, con errores por línea y columna.
Formateador XML
FormatoFormatea XML en línea por niveles de etiqueta, con comentarios, CDATA y DOCTYPE en su propia línea y los valores de atributo intactos.
Formateador HTML
FormatoFormatea HTML en línea por niveles de etiqueta, manteniendo el texto y las etiquetas en línea en la misma línea y el contenido de script o pre intacto.