JSON a Clase Java
Pega un ejemplo de JSON y el generador emite una o más clases de Java con los tipos de campo correctos, getters, setters y anotaciones de la biblioteca JSON. Soporta Jackson (@JsonProperty), Gson (@SerializedName), y Lombok (@Data/@Builder) para un código más limpio. Los objetos anidados se convierten en clases internas o hermanas, dependiendo del diseño que elijas.
Cómo convertir JSON a Java
-
1
Pega el JSON
Una sola muestra es suficiente; múltiples muestras mejoran la detección de nulabilidad.
-
2
Elige la biblioteca
Jackson (el más común en Spring), Gson (Android y algunos proyectos heredados), o POJO simple sin anotaciones.
-
3
Elige extras
Lombok para getters/setters generados automáticamente, patrón de constructor, equals/hashCode. O déjalo simple.
-
4
Elige estilo anidado
Clases hermanas en el mismo archivo (las clases públicas de Java 17+ deben estar en archivos separados) o clases estáticas anidadas.
-
5
Copia el código
Inserta en tu proyecto. Los nombres de clase coinciden con las claves JSON; el paquete se establece según lo que configures.
Ejemplo de salida: Jackson + Lombok
Entrada:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
Salida:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
Mapeo de tipos
| JSON | Tipo Java |
|---|---|
| cadena | String |
| entero (≤ Integer.MAX) | Integer / int |
| entero grande | Long / BigInteger |
| decimal | Double / BigDecimal |
| booleano | Boolean / boolean |
| fecha ISO | LocalDate (Jackson JSR-310) |
| fecha y hora ISO | Instant / OffsetDateTime |
| null (con hermano no nulo) | Tipo envoltorio (ej. Integer) |
| arreglo | List<T> |
| objeto | Clase anidada |
Elegir entre tipos envoltorios y primitivos
- Primitivo (
int,long,boolean), no nulo, eficiente, sin auto-boxing. - Envoltorio (
Integer,Long,Boolean), nulo, requerido si el campo puede estar ausente o ser nulo en JSON.
El generador predetermina a envoltorio para cualquier cosa considerada como nula, primitivo de lo contrario.
Jackson vs Gson
| Característica | Jackson | Gson |
|---|---|---|
| Ubicuidad en Spring | Sí, predeterminado | No (necesita configuración) |
| Rendimiento | Más rápido | Más lento |
| Soporte de fecha JSR-310 | A través de módulo extra | A través de módulo extra |
| Polimorfismo | @JsonTypeInfo |
RuntimeTypeAdapter |
| Tolerancia a comas finales | No (por defecto) | Sí |
Errores comunes
- Usar tipos primitivos para campos nulos.
intno puede ser nulo; Jackson lanzará un error si el JSON tiene"age": null. UsaInteger. - Faltan módulos de fecha. Jackson necesita
jackson-datatype-jsr310paraInstant/LocalDate. Sin él, las fechas caen de vuelta aStringo largos de época. - Compartir tipos envoltorios entre clases no relacionadas. Si dos formas JSON tienen un
Addressanidado, el generador crea dos clasesAddress. Renombra o unifica manualmente. - Olvidar
@JsonIgnoreProperties(ignoreUnknown = true). Jackson estricto lanza errores en propiedades desconocidas; añade esta anotación (o configura globalmente) para una deserialización tolerante.
Preguntas frecuentes
Jackson en la mayoría de los casos, es el predeterminado de Spring, más rápido y tiene un soporte de polimorfismo más rico. Gson es más ligero y más conocido en Android, aunque los proyectos de Android utilizan cada vez más Moshi o kotlinx.serialization.
Lombok reduce mucho el código repetitivo (getters, setters, equals, hashCode, builder). Se usa ampliamente pero requiere el procesador de anotaciones de Lombok en tu construcción. Desactívalo si tu proyecto evita Lombok por razones de higiene de dependencias.
Los campos que son nulos en cualquier muestra observada se convierten en tipos envoltorios (Integer en lugar de int), por lo que pueden contener nulos. Jackson luego deserializa "age": null sin error. Añade @JsonInclude(Include.NON_NULL) para omitir nulos en la serialización.
Sí, si seleccionas “registro”. Los registros son concisos, inmutables y funcionan con Jackson 2.12+. Para proyectos de Spring Boot 3, los registros más la generación sin Lombok son la opción moderna.
Herramientas relacionadas
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.
Generador de EditorConfig
Genera un archivo .editorconfig con tu estilo y tamaño de indentación, fin de línea, charset y reglas de espacios para un formato consistente en IDEs y editores.
Herramienta disponible en otros idiomas
- JSON zu Java-Klasse [DE]
- JSON vers classe Java [FR]
- JSON till Java-klass [SV]
- JSON을 Java 클래스로 [KO]
- JSON naar Java-klasse [NL]
- JSON إلى فئة Java [AR]
- JSON ke Kelas Java [ID]
- JSON から Java クラスへ [JA]
- JSON เป็นคลาส Java [TH]
- JSON sang lớp Java [VI]
- JSON na klasę Java [PL]
- JSON para Classe Java [PT]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]
- JSON in classe Java [IT]
- JSON в класс Java [RU]