JSON a Java
Herramienta online gratuita para convertir JSON a Java, transforma datos JSON en clases POJO anotadas con un solo clic. Soporta 4 bibliotecas de anotaciones de serialización (Lombok / Jackson / Gson / Fastjson), modo Lombok @Data automático, interfaz Serializable opcional, generación automática de toString / equals / hashCode, 4 estrategias de nomenclatura de campos y clases anidadas generadas automáticamente.
Relacionado
Acerca de JSON a Java POJO y clases entidad Java
La herramienta JSON a Java (JSON to Java Converter) convierte automáticamente estructuras JSON en código de clases POJO Java estándar, liberando al desarrollador del trabajo repetitivo de escribir manualmente package / import / campos privados / getter / setter. Es especialmente útil para convertir rápidamente el JSON de ejemplo de la documentación de una API en clases entidad Java listas para compilar.
POJO (Plain Old Java Object) es la abreviatura que usa la comunidad Java para «objetos Java simples», con las siguientes restricciones: ① Campos privados (private); ② Acceso a los campos mediante métodos getter/setter públicos; ③ Sin dependencia de herencia de frameworks (por ejemplo, sin heredar de HttpServlet / EJB). El POJO es el portador de datos central de frameworks principales como Spring Boot / Hibernate / Jackson; la esencia de JSON a Java es estaticar la estructura dinámica del JSON a un tipo POJO.
Esta herramienta soporta las 4 principales bibliotecas de anotaciones de serialización: ① Gson (Google, anotación @SerializedName); ② Jackson (por defecto en Spring Boot, anotaciones @JsonProperty + @JsonFormat); ③ Fastjson (Alibaba, anotación @JSONField); ④ Lombok (conjunto de @Data / @Builder / @NoArgsConstructor / @AllArgsConstructor). Los desarrolladores pueden elegir según el framework de serialización del proyecto, sin necesidad de procesamiento adicional en el IDE.
El modo Lombok @Data es la característica avanzada de esta herramienta: al activarlo, la clase Java generada tiene solo 5 líneas (@Data + campos), y todos los getter / setter / equals / hashCode / toString se generan automáticamente en tiempo de compilación por Lombok. Comparado con la generación por plantilla del IDE o el POJO escrito a mano, mejora la legibilidad del código fuente en más del 80% y reduce el coste de mantenimiento en más del 60%. Ten en cuenta que el proyecto debe incluir la dependencia de Lombok (coordenadas Maven / Gradle).
Otro diferenciador destacado es «Descarga ZIP con varios archivos + organización automática por ruta de paquete»: las herramientas online tradicionales solo permiten copiar y pegar clases individuales; esta herramienta descarga un ZIP con la estructura de directorios organizada según el nombre del paquete (por ejemplo com/geekformat/pojo/), que se puede importar directamente con «Import Project» del IDE tras descomprimir, ahorrando la creación manual de directorios de paquete.
Casos de uso
- Desarrollo Android: convierte JSON devuelto por el backend en clases entidad Java (POJO), con anotaciones Gson / Moshi / Fastjson / Jackson opcionales listas para deserializar
- Backend Spring Boot: convierte rápidamente el JSON de ejemplo de la documentación de la API en clases DTO / VO / Entity, simplificando el código con Lombok @Data
- Integración con APIs de terceros: convierte la respuesta JSON de la API externa en un modelo Java correspondiente, eligiendo la anotación de serialización adecuada (Jackson / Fastjson / Gson) para una integración sin fisuras
- Arquitectura de microservicios: unifica los modelos de datos de petición/respuesta de las interfaces RPC, compartiendo una misma definición de clase Java entre equipos
- Enseñanza y formación: convierte JSON de ejemplo a POJO para cursos de estructuras de datos o clases de Java, demostrando el modelado orientado a objetos
- Documentación de APIs: incrusta ejemplos de clases entidad Java en documentación Swagger / OpenAPI / Knife4j
- Preparación de pruebas unitarias: convierte fixtures JSON a clases Java y luego deserializa con Jackson para data-driven testing
- Scripts de migración de datos: convierte archivos de configuración JSON a clases Java para acceder a la lógica de negocio con tipos fuertes
- Mock frontend-backend: el backend convierte primero el modelo JSON a Java, y el frontend obtiene al mismo tiempo su interface TypeScript y el POJO Java correspondiente
- Revisión de código: convierte el JSON de respuesta de la API directamente en un POJO legible para discutir el nombrado de campos en la code review
- Refactorización de proyectos legacy: refactoriza código basado en acceso dinámico JSONObject a acceso fuertemente tipado basado en POJO
- Modelado multi-rol Entity / DTO: a partir del mismo JSON genera UserEntity (capa DB) + UserDTO (capa API) + UserVO (capa vista), eligiendo distintas anotaciones para cada uno
- Integración con backend snake_case: el backend devuelve campos en snake_case y el sistema Java frontend activa «Convertir a camelCase» + anotaciones Gson/Jackson para una integración sin fisuras
- DTO que requiere persistencia: marca «Implementar Serializable» para usarlo directamente en caché Redis o almacenamiento de sesión distribuida
Cómo Usar
- Pega en el editor izquierdo un objeto JSON (recomendado) o un array, o haz clic en «Sample» para cargar el ejemplo en chino (con address / company / tags anidados)
- Haz clic en el botón «Settings» de la barra de herramientas (o el botón con el nombre de clase) y, en el diálogo, elige: ① Define el nombre de la clase raíz (por ejemplo User) y el del paquete (por ejemplo com.example.entity); ② Selecciona la biblioteca de anotaciones de serialización (Gson / Jackson / Fastjson / Lombok / Ninguna); ③ Selecciona el estilo de código (toString / equals / hashCode / constructores / Serializable); ④ Selecciona la estrategia de nomenclatura de campos (Mantener como está / camelCase / Todo en minúsculas / UPPER_SNAKE)
- La herramienta convierte automáticamente en 400ms y muestra a la derecha todas las clases Java generadas (cada clase en una tarjeta independiente, con la biblioteca de anotaciones actual y la insignia Lombok en el título); si el JSON es inválido aparecerá el botón «Reparar JSON»
- Comprueba que los nombres de clase, los nombres de campo y las anotaciones sean los esperados; si necesitas ajustes, modifica los nombres de clave del JSON fuente o vuelve a abrir Settings para cambiar las opciones
- Cuando estés conforme, haz clic en el botón «Copiar» de una clase individual para pegarla en tu IDE, o en «Download ZIP» para descargar todas las clases con la estructura de directorios organizada por paquete
Características
- 4 bibliotecas de anotaciones de serialización: Gson (@SerializedName) / Jackson (@JsonProperty + @JsonFormat para fechas) / Fastjson (@JSONField) / Lombok (@Data), cambia con un interruptor
- Modo Lombok @Data: genera automáticamente la combinación @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor, reduciendo una clase Java de ~50 líneas a ~5 líneas
- 4 estrategias de nomenclatura de campos: Mantener como está / snake_case a camelCase (user_name → userName) / Todo en minúsculas / UPPER_SNAKE para constantes
- Estilo de código libremente combinable: generación opcional de toString / equals / hashCode / constructor sin argumentos / constructor con todos los argumentos / implementación de Serializable
- Inferencia inteligente de tipos: identifica automáticamente String / Integer / Double / Boolean / List<Object> / tipos anidados, sin necesidad de especificar manualmente el tipo de campo
- Generación automática de clases anidadas: los objetos anidados se convierten en clases Java independientes (nombradas con la primera letra en mayúscula); los objetos en arrays se nombran siguiendo la regla de eliminar la 's' final del plural
- Expansión automática de genéricos en arrays: los arrays JSON se convierten automáticamente a List<T> en Java, con el tipo de elemento inferido del primer ítem
- Plantilla POJO completa: genera un archivo .java completo con declaración de package + cabecera con Copyright + marca de tiempo autogenerada + import + campos privados + getter/setter
- Descarga ZIP con varios archivos: todas las clases generadas se organizan por ruta de paquete (por ejemplo com/example/entity/User.java), empaquetadas en ZIP con estructura de directorios
- Nombre de paquete y clase personalizables: define libremente el package (por ejemplo com.example.entity) y el nombre de la clase raíz (por ejemplo User), todos los nombres de clase se derivan del nombre raíz
- Control de indentación: admite cambio entre 2 y 4 espacios para coincidir con las convenciones del equipo
- Copia de clases individuales: cada clase Java generada tiene su propio botón «Copiar» para pegarla directamente en tu IDE
- Conversión automática y reparación de errores: conversión automática con debounce de 400ms; si el JSON es inválido aparece el botón «Reparar JSON» que corrige errores comunes (comas sobrantes, comillas simples, etc.)
- Datos de ejemplo y carga de archivos: incluye datos de ejemplo en chino (con address / company / tags / scores anidados), soporta arrastrar o subir archivos .json / .txt
- Historial local: persistencia en localStorage de las últimas 200 entradas, recuperación rápida tras refrescar o cerrar accidentalmente la página
- Ejecución local en el navegador: todo el análisis de JSON, la generación de Java y el empaquetado ZIP se realizan con JavaScript directamente en tu navegador; ningún dato se sube a ningún servidor
Ejemplos de Código
Java: deserializar un POJO generado por la herramienta con Jackson
javaEn un proyecto Spring Boot, el uso más común: deserializar la respuesta de una API al POJO generado por esta herramienta usando Jackson.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.geekformat.pojo.User;
import com.geekformat.pojo.Address;
public class ApiClient {
private final ObjectMapper objectMapper = new ObjectMapper();
public User getUser(int userId) throws Exception {
// 1) Call the API to get the JSON string
String json = httpClient.get("https://api.example.com/users/" + userId);
// 2) Deserialize directly into the POJO generated by this tool
User user = objectMapper.readValue(json, User.class);
// 3) Strongly-typed field access (compile-time type checking)
System.out.println("User: " + user.getName());
if (user.getAddress() != null) {
System.out.println("City: " + user.getAddress().getCity());
}
return user;
}
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
User user = client.getUser(123);
System.out.println(user.getName());
}
}Java: uso de Lombok @Data + @Builder
javaEl código generado en modo Lombok de esta herramienta se usa así: construcción con llamadas encadenadas al builder; Lombok genera el POJO completo en tiempo de compilación.
import com.geekformat.pojo.User;
public class UserService {
public User createUser() {
// Lombok @Builder pattern: chain calls, more intuitive than traditional setters
User user = User.builder()
.id(1)
.userName("Alice")
.email("alice@example.com")
.isActive(true)
.createdAt("2026-07-08T10:00:00.000Z")
.build();
System.out.println(user);
// Lombok @Data auto-generates toString():
// User(id=1, userName=Alice, email=alice@example.com, ...)
return user;
}
public boolean isValid(User user) {
// Lombok @Data auto-generates equals() and hashCode()
return user != null && user.getId() != null;
}
}
/*
* Corresponding pom.xml dependency:
* <dependency>
* <groupId>org.projectlombok</groupId>
* <artifactId>lombok</artifactId>
* <version>1.18.30</version>
* <scope>provided</scope>
* </dependency>
*/Línea de comandos: descomprimir el ZIP descargado e importarlo al IDE
bashLa herramienta descarga un ZIP (organizado por ruta de paquete); tras descomprimirlo se puede importar directamente al IDE.
# 1) After downloading the ZIP (file name like User.zip)
unzip User.zip -d src/main/java/
# 2) Check the directory structure
tree src/main/java/
# src/main/java/
# └── com/
# └── example/
# └── entity/
# ├── User.java
# ├── Address.java
# └── Company.java
# 3) In IntelliJ IDEA: right-click the com directory → "Mark Directory as" → "Sources Root"
# Or in Eclipse: File → Import → Existing Projects into Workspace
# 4) Use directly in a Spring Boot project
# UserController.java
# @PostMapping("/users")
# public ResponseEntity<User> createUser(@RequestBody User user) {
# userService.save(user);
# return ResponseEntity.ok(user);
# }
# 5) Compile to verify
mvn compile
# [INFO] BUILD SUCCESS
# 6) (Optional) When using Lombok, remember to add the lombok dependency in pom.xml
# <dependency>
# <groupId>org.projectlombok</groupId>
# <artifactId>lombok</artifactId>
# </dependency>Preguntas Frecuentes
¿Cómo convierto JSON a una clase POJO de Java?
Pega el contenido JSON en el editor de entrada; la herramienta convierte automáticamente en 400ms, o haz clic en el botón «Convert» de la barra de herramientas. Tras la conversión, la derecha muestra todas las clases Java generadas, cada una con su propio botón «Copiar»; haz clic en «Download ZIP» para empaquetar y descargar todas las clases.
¿Qué estructuras JSON se admiten?
Se admiten dos estructuras: ① Objeto JSON (como clase raíz, genera automáticamente public class RootBean { ... }); ② Array JSON (el primer objeto del array sirve como plantilla de la clase raíz). Todos los objetos anidados se procesan recursivamente como clases independientes, y los objetos dentro de arrays se procesan recursivamente como clases correspondientes al tipo de elemento de la List.
¿Qué contiene cada clase Java generada?
Cada archivo .java generado incluye: ① Cabecera con Copyright y marca de tiempo autogenerada; ② Declaración de package; ③ Sentencias import (incluyendo List / Objects / Serializable / Gson / Jackson / Fastjson / Lombok según necesidad); ④ Declaración public class (con implements Serializable opcional); ⑤ Campos privados (private, con anotaciones opcionales); ⑥ Métodos getter/setter estándar (o solo anotaciones Lombok); ⑦ Métodos toString / equals / hashCode opcionales. El archivo se compila directamente con javac.
¿Admite la generación de anotaciones Gson / Jackson / Fastjson / Lombok?
Sí. En el grupo «Biblioteca de anotaciones de serialización» del diálogo Settings elige: ① Gson (añade @SerializedName("clave original") a cada campo); ② Jackson (añade @JsonProperty, y @JsonFormat adicional en campos de fecha); ③ Fastjson (añade @JSONField(name="clave original") a cada campo); ④ Lombok (añade @Data a la clase, con @Builder / @NoArgsConstructor / @AllArgsConstructor opcionales); ⑤ Sin anotaciones (por defecto, POJO puro). La biblioteca seleccionada importa automáticamente los paquetes correspondientes.
¿Cómo se ve el código generado con el modo Lombok @Data?
Al activar Lombok, la clase Java generada se reduce drásticamente. Por ejemplo, una clase User con Lombok habilitado tiene solo 5 líneas: @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + declaración de campos. Todos los getter / setter / equals / hashCode / toString se generan automáticamente en tiempo de compilación por Lombok, mejorando notablemente la legibilidad del código fuente. Nota: el proyecto debe incluir la dependencia de Lombok (coordenada lombok en pom.xml / build.gradle) y el IDE debe tener instalado el plugin de Lombok.
¿Cómo convierto nombres de campo snake_case a camelCase?
En el grupo «Estrategia de nomenclatura de campos» del diálogo Settings, elige el modo «Convertir a camelCase». La herramienta transforma automáticamente nombres de campo JSON de snake_case al estilo recomendado en Java. Por ejemplo, user_name → userName, created_at → createdAt, is_active → isActive. Si además has elegido anotaciones Gson/Jackson/Fastjson, la anotación conserva la cadena snake_case original, garantizando que la deserialización mapee correctamente.
¿Cómo se procesan los objetos JSON anidados?
La herramienta crea automáticamente clases Java independientes para los objetos anidados. Regla de nombrado: la clave del objeto anidado se capitaliza como nombre de clase (por ejemplo, address → Address); las claves de objetos en arrays eliminan la 's' final y se capitalizan (por ejemplo, users → User). Todas las clases anidadas incluyen campos completos, getter/setter y anotaciones.
¿Los campos array se convierten automáticamente a List?
Sí. Los campos array del JSON se convierten automáticamente a List<T> en Java, con el tipo de elemento inferido del primer elemento del array. Por ejemplo: ["a","b","c"] → List<String>; [{...},{...}] → List<User> (User es una nueva clase nombrada a partir de la clave); un array vacío [] queda como List<Object> por defecto.
¿Cómo cambio el nombre de la clase raíz y del paquete?
En la esquina superior derecha de la barra de herramientas hay un botón Settings (o un botón con la marca del nombre de clase). Al hacer clic se abre el diálogo de configuración donde puedes definir: ① Nombre de la clase raíz (por defecto JsonRootBean); ② Nombre del paquete (por defecto com.geekformat.pojo). Tras modificar, todos los nombres de clase se actualizan y la estructura de directorios del ZIP se reorganiza según la ruta del paquete.
¿La descarga es un único .java o un archivo ZIP?
La descarga es un archivo ZIP (JsonRootBean.zip) que contiene todas las clases Java generadas, organizadas por la ruta del paquete. Por ejemplo, con el paquete com.geekformat.pojo, la estructura interna del ZIP es: com/geekformat/pojo/JsonRootBean.java, com/geekformat/pojo/Address.java, etc. Puedes descomprimirlo con el comando unzip o importarlo directamente en tu IDE.
¿Puedo copiar una clase individual directamente al IDE?
Sí. Cada clase Java generada se muestra como una tarjeta independiente con un botón «Copiar» en la esquina superior derecha. Al hacer clic, el código completo de la clase (incluyendo package + import + definición de clase + campos + anotaciones + getter/setter) se copia al portapapeles, listo para pegar en IntelliJ IDEA, Eclipse, VS Code u otros IDE.
¿Cómo genero el patrón Builder con Lombok @Builder?
En el grupo «Estilo de código» del diálogo Settings: ① Marca «Usar Lombok @Data para simplificar el código» (esto activa automáticamente la biblioteca de anotaciones Lombok); ② Marca «Generar patrón Builder @Builder». La clase generada incluirá automáticamente la anotación @Builder, y se usa así: User user = User.builder().id(1).name("Alice").build();
¿Cómo hago que la clase generada implemente la interfaz Serializable?
En el grupo «Estilo de código» del diálogo Settings marca «Implementar interfaz Serializable». La herramienta automáticamente: ① Añade implements Serializable en la declaración de la clase; ② Importa java.io.Serializable. Ideal para escenarios donde necesitas serializar el POJO a archivo, transmitirlo por red o almacenarlo en caché Redis.
¿Qué diferencia hay entre JSON a Java y JSON a TypeScript?
Ambos convierten JSON a definiciones de tipo del lenguaje correspondiente, pero con enfoques distintos: ① Java genera clases POJO completas (con package + import + campos privados + getter/setter), listas para compilar y ejecutar; ② TypeScript genera declaraciones interface o type, que solo describen la estructura de datos sin implementación. La elección depende de tu lenguaje de desarrollo.
¿Se puede usar el código generado en un proyecto Spring Boot?
Sí. Las clases POJO generadas cumplen con la especificación estándar Java Bean (campos privados + getter/setter) y son compatibles con la deserialización Jackson de Spring Boot, el binding de formularios MVC y la definición manual de entidades JPA. Si quieres simplificar con Lombok (@Data / @Builder), actívalo con un clic en el diálogo Settings sin necesidad de refactorizar en el IDE.
¿Qué hago si el JSON tiene errores de formato?
La herramienta detecta automáticamente la validez del JSON; en caso de error muestra una indicación roja a la derecha y ofrece el botón «Reparar JSON». Al hacer clic, se corrigen automáticamente errores comunes: ① comas sobrantes al final; ② reemplazo de comillas simples por dobles; ③ añadir comillas a claves sin comillas; ④ eliminación de comentarios. Tras la reparación, se puede convertir directamente a clases Java.
¿Se suben los datos a algún servidor? ¿La privacidad está garantizada?
Ejecución 100% local en el navegador. Todo el análisis de JSON, la generación de clases Java y el empaquetado ZIP se realizan con JavaScript (JSZip) directamente en tu navegador. Ni los datos JSON introducidos ni el código Java generado se suben a ningún servidor, ni se registran ni se almacenan en la nube. Puedes usarlo con tranquilidad con JSON sensible que contenga campos de interfaces internas, estructuras de negocio no publicadas o respuestas de API no públicas; al cerrar la página se eliminan todos los datos.
¿Se ralentiza con un JSON grande de 10 000 líneas?
La herramienta no tiene un límite explícito de líneas, pero el navegador se vuelve más lento al analizar y renderizar JSON muy grandes. Recomendaciones: ① Divide el JSON y conviértelo por lotes; ② Concéntrate en un único nivel de anidamiento a la vez; ③ Si necesitas generar más de 100 clases, considera usar plugins de generación de código del IDE (como MyBatis Generator, MapStruct) o bibliotecas específicas de generación de Java (JavaPoet / JOOQ).
Solución de problemas
Mensaje «Introduce datos JSON» o error similar
El editor izquierdo está vacío o solo contiene espacios. Asegúrate de pegar contenido JSON válido, o haz clic en «Sample» para cargar el ejemplo en chino, o en «Upload» para seleccionar un archivo .json / .txt.
Mensaje «Unexpected token ... in JSON at position N»
El formato JSON no es válido. Causas habituales: ① Coma sobrante al final (por ejemplo, {"a":1,}); ② Comillas simples en lugar de dobles; ③ Sintaxis de objeto JS (por ejemplo, {key: value}) en lugar de JSON ({"key": "value"}). El botón «Reparar JSON» puede corregir algunos de estos errores automáticamente.
Las anotaciones generadas no coinciden con el framework del proyecto
Cambia la biblioteca de anotaciones en el grupo «Biblioteca de anotaciones de serialización» del diálogo Settings: ① Jackson para proyectos Spring Boot; ② Gson para proyectos Android; ③ Fastjson para backends Java del ecosistema Alibaba; ④ Lombok si quieres simplificar el código; ⑤ «Sin anotaciones» si no quieres introducir bibliotecas de anotaciones. Al cambiar, todas las anotaciones de campo e imports se regeneran automáticamente.
Lombok falla al compilar con «símbolo no encontrado»
El proyecto no incluye la dependencia de Lombok. Añade a pom.xml: `<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency>`. El IDE también necesita el plugin de Lombok (IntelliJ IDEA → Plugins → busca Lombok → Install).
Quiero código simplificado pero sin Lombok
Puedes dejar Lombok @Data desmarcado en el diálogo Settings y mantener un modo tradicional ligero: ① Marca «Generar constructor sin argumentos» + «Generar constructor con todos los argumentos» + «Generar toString / equals / hashCode»; ② El equipo puede usar Postfix Completion en el IDE (plantillas .var / .field de IntelliJ) para generar en lote. También puedes usar la función Generate POJO integrada del IDE (Alt+Insert → Constructor / Getter / Setter).
Tras convertir snake_case a camelCase el IDE muestra «símbolo no encontrado»
La opción «Convertir a camelCase» solo cambia el nombre del campo, pero los getter/setter autogenerados por Lombok @Data se generan según el nuevo nombre (por ejemplo, user_name → userName → getUserName / setUserName), por lo que el código es correcto. Si sigue fallando, comprueba: ① Si el IDE ha recompilado correctamente; ② Si el plugin de Lombok está instalado y habilitado; ③ Limpia la caché del IDE (File → Invalidate Caches).
El nombre de clase del objeto anidado no es el deseado (por ejemplo, categories se nombra Categori)
La herramienta aplica la regla «eliminar la 's' final + capitalizar» a los objetos en arrays, que no funciona bien con plurales irregulares como categories. Recomendaciones: ① Cambia la clave del JSON fuente a singular (por ejemplo, categories → category); ② O renombra la clase en el IDE tras la generación (lo que también actualiza todas las referencias).
La estructura de directorios del ZIP descargado no es correcta
Los directorios del ZIP se organizan según el package configurado (por defecto com/geekformat/pojo/). Si la ubicación tras descomprimir no es correcta, puedes: ① Cambiar el nombre del package (por ejemplo, com.example) y volver a descargar; ② Usar unzip -d src/main/java para especificar el directorio destino; ③ Abrir directamente en el IDE la carpeta descomprimida (File → Open).
La deserialización de campos de fecha falla en modo Jackson
La herramienta detecta automáticamente cadenas de fecha ISO 8601 como "2026-07-08T10:00:00.000Z" y añade @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"). Si tu formato de fecha es distinto (por ejemplo, "2026-07-08"), puedes: ① Usar formato ISO 8601 en el JSON fuente; ② Ajustar manualmente el parámetro pattern de @JsonFormat tras la generación.
Los nombres de archivo del ZIP se ven corruptos en Windows
Los nombres del archivo ZIP y de las clases Java están en inglés (ASCII) por defecto, no deberían corromperse. Si el JSON fuente contiene claves en chino (nombres de campo en chino), el IDE puede advertir de nomenclatura no estándar pero no se corromperán. Se recomienda cambiar las claves JSON a inglés (camelCase) para cumplir con las convenciones Java.
La página se ralentiza al generar 100+ clases anidadas
La herramienta no tiene un límite explícito de clases, pero el rendimiento del navegador cae con DOM muy grandes. Recomendaciones: ① Divide el JSON en módulos independientes y conviértelos por separado; ② Usa directamente las herramientas de generación de código integradas en el IDE (plugin JSON to POJO de IntelliJ); ③ Mantén el anidamiento por debajo de 6 niveles, o considera refactorizar la estructura del JSON.
Un array numérico se genera como List<Object>
Suele ocurrir cuando el array está vacío [] y se infiere por defecto como List<Object>. Puedes añadir al menos un elemento de ejemplo en el JSON fuente (por ejemplo, [1,2,3]) y la herramienta inferirá el tipo a partir del primer elemento; o cambia manualmente List<Object> a List<Integer> tras la generación.
Un campo con valor null se genera como tipo Object
El valor null en JSON se infiere por defecto como tipo Object (porque no se puede deducir el tipo real). Es la opción segura para evitar errores de inferencia. Si conoces el tipo, añade un valor de ejemplo a ese campo en el JSON fuente (por ejemplo, "field": "" se infiere como String) y elimina el valor de ejemplo tras la generación.
La estructura de directorios del ZIP no se actualiza al cambiar el nombre del package
Tras cambiar el package debes hacer clic de nuevo en «Convert» (o esperar los 400ms del trigger automático). Al cerrar el diálogo Settings, el siguiente cambio de entrada regenerará todos los archivos con el nuevo nombre de package.
Quiero limpiar la cabecera auto-generada (por ejemplo, el Copyright)
La herramienta genera por defecto una cabecera con Copyright y marca de tiempo autogenerada. Si no la necesitas, usa Buscar y Reemplazar global en el IDE, o modifica la función generateFileHeader en el código fuente de la herramienta (requiere volver a desplegar).
Quiero hacer la conversión «backend snake_case + frontend Java»
Escenario típico: el backend (por ejemplo, servicios Python / Go) devuelve campos en snake_case y el frontend Java necesita campos en camelCase. Pasos: ① En el diálogo Settings, elige la biblioteca Jackson o Gson; ② Selecciona la estrategia de nomenclatura «Convertir a camelCase»; ③ La herramienta generará automáticamente: nombre de campo = userName (camelCase), valor de la anotación = "user_name" (clave original), la deserialización mapea por la anotación, y el acceso sigue la convención Java.
Glosario
- POJO
- Plain Old Java Object, objeto Java simple. Restricciones: campos privados + getter/setter públicos + sin dependencia de frameworks. Esta herramienta genera POJO estándar.
- JavaBean
- Otro nombre que la comunidad Java usaba históricamente para POJO, exige constructor público sin argumentos + campos privados + getter/setter públicos. Las clases generadas por esta herramienta cumplen con la especificación JavaBean.
- DTO (Data Transfer Object)
- Objeto de transferencia de datos, usado habitualmente como portador de datos entre procesos (API / RPC). Los POJO generados por esta herramienta pueden usarse directamente como DTO.
- VO (Value Object)
- Value Object, usado habitualmente en la capa de vista (datos que el Controller devuelve al frontend). Los POJO generados por esta herramienta también son válidos aquí.
- Entity
- Objeto entidad, corresponde a una fila de una tabla de base de datos. Los POJO generados por esta herramienta pueden servir como clase base @Entity para JPA / Hibernate (añadiendo manualmente las anotaciones).
- @SerializedName
- Anotación de mapeo de campos de la biblioteca Gson. En modo Gson, esta herramienta añade automáticamente @SerializedName("clave original") a cada campo, garantizando el mapeo correcto en la deserialización.
- @JsonProperty
- Anotación de mapeo de campos de Jackson. En modo Jackson, esta herramienta añade automáticamente @JsonProperty("clave original") a cada campo; los campos de fecha reciben además @JsonFormat para definir el formato de serialización.
- @JSONField
- Anotación de mapeo de campos de la biblioteca Fastjson de Alibaba. En modo Fastjson, esta herramienta añade automáticamente @JSONField(name = "clave original") a cada campo.
- Lombok @Data
- Anotación compuesta de Lombok, equivalente a @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor. En modo Lombok, esta herramienta añade esta anotación a la clase con un solo clic.
- Lombok @Builder
- Anotación del patrón Builder de Lombok. Al activarla, esta herramienta la añade automáticamente y genera un método builder() encadenable.
- Serializable
- Interfaz marcador de Java; al implementarla, el objeto puede serializarse (por ejemplo, a archivo, transmisión por red, caché Redis). Al marcar «Implementar Serializable» esta herramienta añade implements Serializable y el import java.io.Serializable.
- Clase anidada (Nested Class)
- Clase Java independiente que la herramienta genera automáticamente para objetos JSON anidados. Regla de nombrado: la clave del objeto anidado se capitaliza (por ejemplo, address → Address).
- Genérico List
- Interfaz del framework de colecciones de Java; la herramienta convierte automáticamente los arrays JSON a List<T>, con T inferido del primer elemento del array (por ejemplo, ["a"] → List<String>).
- getter / setter
- Métodos de acceso estándar del Java Bean. El getter se nombra getXxx() y devuelve el campo; el setter se nombra setXxx(valor) y asigna el campo. En modo Lombok los genera automáticamente @Data; en el modo tradicional los genera explícitamente la herramienta.
- Declaración de package
- Primera línea no comentada de un archivo Java, declara el espacio de nombres al que pertenece la clase. Esta herramienta la genera según el nombre de paquete definido por el usuario y organiza el ZIP en directorios com/xxx/yy.
- snake_case → camelCase
- Conversión de estrategia de nomenclatura de campos. Esta herramienta convierte automáticamente user_name → userName, is_active → isActive, created_at → createdAt, cumpliendo con la convención de nomenclatura Java.
- JSZip
- Biblioteca JavaScript de empaquetado ZIP del lado del navegador; esta herramienta la usa para generar archivos ZIP directamente en el navegador, sin procesamiento en el servidor.
- Historial en localStorage
- Almacenamiento local de clave-valor del navegador (capacidad de 5-10 MB aprox.). Esta herramienta usa localStorage para persistir las últimas 200 entradas.
- Debounce
- Técnica de optimización de rendimiento frontend: agrupa eventos de alta frecuencia en una única ejecución final. Esta herramienta usa un debounce de 400ms para evitar bloqueos al analizar archivos grandes.
- tryFixJSON
- Función de reparación de JSON integrada en esta herramienta: corrige automáticamente comas sobrantes al final, reemplazo de comillas simples por dobles, añadir comillas a claves sin comillas, eliminación de comentarios y otros errores comunes.
Tabla rápida de mapeo de tipos JSON a Java
Correspondencia entre los tipos de datos JSON inferidos automáticamente por la herramienta y los tipos Java correspondientes:
| Ejemplo de valor JSON | Método de detección | Tipo Java generado | Valor por defecto del campo |
|---|---|---|---|
null | value === null | Object | null |
true / false | typeof value === 'boolean' | Boolean | false |
42 | typeof value === 'number' && Number.isInteger(value) | Integer | 0 |
3.14 | typeof value === 'number' && !Number.isInteger(value) | Double | 0.0 |
"hello" | typeof value === 'string' | String | null |
[...] (array vacío) | Array.isArray(value) && value.length === 0 | List<Object> | new ArrayList<>() |
["a","b"] | Array.isArray(value) && typeof value[0] === 'string' | List<String> | new ArrayList<>() |
[1,2,3] | Array.isArray(value) && typeof value[0] === 'number' | List<Integer> | new ArrayList<>() |
[{...},{...}] | Array.isArray(value) && typeof value[0] === 'object' | List<Xxx> | new ArrayList<>() |
{...} (objeto anidado) | typeof value === 'object' && !Array.isArray(value) | Xxx (clase independiente) | new Xxx() |
Tabla comparativa de las 4 bibliotecas de anotaciones de serialización
Las 4 bibliotecas principales de anotaciones de serialización JSON para Java soportadas por la herramienta, elige según el framework de tu proyecto:
| Biblioteca | Anotación generada | Import automático | Escenario |
|---|---|---|---|
Sin anotaciones | Ninguna (POJO puro) | Ninguno | Escenarios sin dependencia de frameworks; deserialización manual con bibliotecas genéricas como jackson-databind |
Gson | @SerializedName("user_name") | import com.google.gson.annotations.SerializedName; | Aplicaciones Android, ecosistema Gson de Google, Retrofit + Gson |
Jackson | @JsonProperty("user_name") + @JsonFormat en campos de fecha | import com.fasterxml.jackson.annotation.JsonProperty; + JsonFormat | Framework de serialización por defecto en Spring Boot, APIs web backend |
Fastjson | @JSONField(name = "user_name") | import com.alibaba.fastjson.annotation.JSONField; | Ecosistema Alibaba, sistemas Java internos, escenarios de deserialización de alto rendimiento |
Lombok | @Data a nivel de clase (+ @Builder / @NoArgsConstructor / @AllArgsConstructor opcionales) | import lombok.Data; (+ otros) | Cualquier proyecto que necesite simplificar código repetitivo; combinable con cualquier biblioteca de serialización |
Tabla comparativa de las 4 estrategias de nomenclatura de campos
Las 4 estrategias de conversión de nomenclatura de campos soportadas por la herramienta, optimizadas para distintos orígenes de JSON:
| Modo | Ejemplo de entrada | Nombre de campo Java generado | Escenario |
|---|---|---|---|
Mantener como está | user_name | user_name | Los nombres de campo JSON ya cumplen la convención Java (por ejemplo, APIs internas); o el equipo prefiere snake_case |
Convertir a camelCase | user_name | userName | Estilo de nomenclatura recomendado en Java; backends con nomenclatura snake_case (por ejemplo, Python / Go) |
Todo en minúsculas | UserName | username | Integración con campos especiales de base de datos (poco frecuente) |
UPPER_SNAKE | user_name | USER_NAME | Definición de constantes Java (public static final); no recomendado para campos POJO en general |
Comparativa: modo Lombok @Data vs POJO tradicional
Compara líneas de código, legibilidad y dependencias entre los dos estilos:
| Aspecto | Modo Lombok @Data | Modo POJO tradicional |
|---|---|---|
Líneas de código fuente | ~5 líneas (4 anotaciones + campos) | ~50 líneas (4-5 líneas de getter/setter por campo + clase) |
Legibilidad | Muy alta (todos los campos y anotaciones visibles de un vistazo) | Media (mucho código repetitivo) |
Producto compilado | Bytecode completo (generado por el procesador de Lombok en IDE / javac) | Bytecode completo (compilación directa) |
Dependencia en tiempo de ejecución | Requiere la dependencia de Lombok (en compilación) | Sin dependencias adicionales |
Soporte de IDE | Requiere instalar el plugin de Lombok (IntelliJ / Eclipse) | Soporte nativo |
Coste de mantenimiento | Bajo (añadir campo y listo) | Alto (hay que añadir getter/setter manualmente por cada campo) |
Equipo adecuado | Proyectos medianos/grandes que ya usan Lombok | Proyectos que rechazan las anotaciones de Lombok; mantenimiento de proyectos legacy |
Privacy & Security
En esta herramienta de JSON a Java, todas las operaciones de análisis de JSON, generación de clases Java y empaquetado ZIP se realizan íntegramente en tu navegador mediante JavaScript (JSZip). Ni los datos JSON introducidos ni el código Java generado se suben a ningún servidor, ni se registran, almacenan en caché ni se guardan en la nube. Puedes usarla con tranquilidad con JSON sensible que contenga campos de interfaces internas, estructuras de negocio no publicadas o respuestas de API no públicas; al cerrar la página se eliminan todos los datos.
Authoritative References
- MDNMDN - JSON.parse / JSON.stringify
- OracleTutorial oficial de Java (Oracle) - Clases y objetos
- OracleTutorial oficial de Java (Oracle) - Encapsulación
- LombokDocumentación oficial de Lombok - @Data
- LombokDocumentación oficial de Lombok - @Builder
- JacksonDocumentación oficial de Jackson - ObjectMapper
- GoogleGuía de usuario de Gson
- AlibabaFastjson en GitHub
- SpringSpring oficial - @RequestBody
- Compresión JSON
- CSV a JSON
- JSON a CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- Formateo JSON
- Generador de JSON
- Consulta JSONPath
- Fusionar JSON
- Reparar JSON
- Validador JSON Schema
- Ordenar JSON
- JSON Stringify
- JSON a HTML
- JSON a Java
- JSON to Markdown
- JSON a SQL
- JSON a TOML
- JSON a TypeScript
- XML a JSON
- JSON a XML
- YAML a JSON
- JSON a YAML
- JSON a Python
- JSON a Go
- JSON a Rust
- JSON a Swift
- JSON a C#
- JSON a C++
- JSON a PHP