araç köşesi

Generar clases y structs desde JSON (7 lenguajes)

Convierta un JSON de ejemplo en dataclass de Python, record de C#, struct de Go, data class de Kotlin, struct de Rust (serde), Swift Codable o clase Dart

Sus datos se quedan con usted. La conversión ocurre dentro del navegador; no se envía nada a ningún servidor.

Cómo funciona

Para trabajar la respuesta de una API como objetos con tipo, primero necesita tipos que correspondan a su JSON, y pasar a mano una respuesta anidada de veinte campos es lento y deja pasar errores de escritura. Pegue una respuesta de ejemplo en el panel izquierdo, elija el lenguaje en la lista y escriba un nombre de tipo raíz como Pedido; el código aparece al instante a la derecha. En el ejemplo, el objeto "envio" se vuelve un tipo propio (Envio) y el array "articulos" una lista de Articulo, el singular del nombre del array. Todos los registros de un array se combinan en un solo tipo: el segundo artículo no trae descuento, así que ese campo queda como float | None en Python, double? en C#, *float64 en Go y Option<f64> en Rust. Si un número es entero o decimal se lee de cómo está escrito: 899.5 sigue siendo decimal y 1024 entero. Una clave como "nombre_cliente" se renombra según la regla del lenguaje (NombreCliente en Go, nombreCliente en Kotlin) y el nombre original se guarda en una etiqueta o anotación para que la biblioteca JSON lo encuentre.

Esta herramienta también se busca como convertir json a clase python, json a clase c#, json a struct go, json to python, json to kotlin data class, json to rust, json to swift, json to dart.

¿Qué es Clase de datos (data class, record, struct)?

Una clase de datos es un tipo pensado para llevar datos más que comportamiento: sus campos y tipos están declarados y el compilador o una biblioteca completa lo demás. La @dataclass de Python, el record de C#, la data class de Kotlin y los structs de Go, Rust y Swift cumplen esa función. Pasar una respuesta JSON a estos tipos deja ver nombres de campo mal escritos y tipos confundidos mientras escribe el código, no cuando ya se ejecuta.

¿Qué es Serialización?

La serialización convierte un objeto de su programa en texto que se puede enviar, como JSON; la deserialización vuelve a armar el objeto desde ese texto. Cada lenguaje tiene su biblioteca para esto: System.Text.Json, encoding/json, serde, Codable, kotlinx.serialization. Estas bibliotecas emparejan nombres de campo con claves JSON; cuando los nombres no coinciden, las etiquetas y anotaciones que agrega esta página indican qué clave va en cada campo.

¿Qué diferencia hay entre JSON Schema y los tipos de un lenguaje?

Los tipos de un lenguaje (dataclass, struct, record) sirven para leer JSON dentro de un solo programa: el compilador o el entorno de ejecución revisan nombres y tipos de campos, pero solo en ese lenguaje. JSON Schema es un contrato independiente del lenguaje: comprueba con las mismas reglas, en cualquier lenguaje, si un documento JSON es válido, y suele aparecer en la documentación de las API. Si su propio código lee los datos, use los tipos de esta página; si escribe reglas que varios equipos y lenguajes deben cumplir, JSON Schema encaja mejor.

Qué genera cada lenguaje y qué biblioteca necesita

Cada lenguaje sigue la costumbre de su comunidad, para que el código entre al proyecto sin retoques. Python usa @dataclass de la biblioteca estándar y un método de clase from_dict que también arma los objetos anidados, porque una dataclass no sabe crearse desde un dict. En C#, la salida es un record posicional para System.Text.Json, que viene con .NET. En Go, los campos empiezan con mayúscula para quedar exportados y la etiqueta json:"..." lleva la clave original; abreviaturas como id, url y api se escriben ID, URL y API, como es costumbre en Go.

Kotlin requiere el plugin kotlinx.serialization y Rust los crates serde y serde_json (serde con la función derive en Cargo.toml). A Swift le basta Codable. En Dart, la salida es un par fromJson/toJson escrito a mano que funciona en Flutter sin paquetes extra ni generadores como json_serializable.

  • Python 3.7+: @dataclass + from_dict, campo opcional float | None = None
  • C# 9+: public record Pedido(...) + [property: JsonPropertyName("numPedido")]
  • Go 1.18+: *float64 + json:"descuento,omitempty"
  • Kotlin: @Serializable data class, @SerialName("nombre_cliente")
  • Rust: #[derive(Serialize, Deserialize)], Option<f64>, #[serde(rename)]
  • Swift 5: struct Pedido: Codable + enum CodingKeys
  • Dart 3 / Flutter: campos final, factory fromJson, toJson

Trampas: un solo ejemplo, null y tipos mezclados

Los tipos se deducen solo del ejemplo que pega. Un campo que nunca es null en el ejemplo pero llega como null en producción hará fallar su código en ese momento; por eso conviene pegar un array con varios registros: al combinarlos, los campos que faltan o son null en alguno pasan a ser opcionales por sí solos. Un campo que solo aparece como null no tiene tipo conocido y cae en un tipo que admite cualquier valor JSON (Any en Python, JsonElement en C#, serde_json::Value en Rust, un enum JSONValue que se agrega a la salida de Swift).

Si un campo es número en un registro y texto en otro, se usa ese mismo tipo general; el tipo de los elementos de un array vacío también queda sin conocer. Las fechas (2026-09-27) y los conjuntos pequeños de valores no se convierten en tipos de fecha ni en enums: siguen como texto y ajustarlos queda en sus manos. Palabras reservadas como class, type o self no pueden ser nombre de campo: Python usa class_, Kotlin y Swift usan acentos graves y Rust escribe r#type; el nombre JSON original queda en la etiqueta.

Preguntas frecuentes

¿Cómo convertir JSON a una clase de Python?

Pegue el JSON de ejemplo a la izquierda, elija Python y escriba el nombre del tipo raíz. A la derecha aparece una @dataclass por cada objeto anidado, con un método from_dict que construye el objeto desde un dict JSON. Lea sus datos con json.loads y páselos a Pedido.from_dict(...).

¿Por qué los campos de un struct de Go empiezan con mayúscula?

En Go solo se exportan los campos que empiezan con mayúscula, y encoding/json solo puede llenar esos. Por eso la clave nombre_cliente se vuelve el campo NombreCliente, y la etiqueta json:"nombre_cliente" asegura que al decodificar se use la clave correcta.

¿Por qué algunos campos quedaron como Optional, ? u Option?

Ese campo falta en algunos registros del array o venía como null en el JSON. Si el lenguaje no sabe que un valor puede venir vacío, la lectura falla. Si está seguro de que todos los campos siempre vienen, cambie la opción a Obligatorios; los campos que de verdad eran null siguen siendo opcionales.

¿El JSON que pego se envía a un servidor?

No. La deducción de tipos y la escritura del código ocurren por completo en su navegador; ni siquiera una respuesta con datos de clientes o claves de acceso sale de esta página. Una vez cargada, la página también funciona sin conexión.