piapia123
es

JSON a TypeScript / Go / Java / Rust

Formato

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

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

  1. Pega una muestra de JSON que cubra cuantas ramas puedas
  2. Elige el lenguaje de destino
  3. Escribe el nombre del tipo raíz y decide si los campos anulables deben ser opcionales
  4. 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