araç köşesi

JSON a clase Java (POJO)

Genere una clase Java compilable a partir de un JSON de ejemplo; los objetos anidados pasan a clases propias y los campos faltantes a tipos envoltorio

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 leer en Java la respuesta de una API REST como objetos, primero necesita clases que coincidan con el JSON; escribirlas a mano se vuelve largo y propenso a errores cuando hay muchos campos. Pegue una respuesta de ejemplo a la izquierda y escriba un nombre de clase raíz (por ejemplo Pedido); el código Java aparece a la derecha. Cada objeto anidado se convierte en su propia clase, escrita dentro de la clase raíz como public static class, de modo que la salida compila como un único archivo Pedido.java. Un array de objetos pasa a List<...> y la clase de sus elementos toma el singular del nombre del array: "productos" → Producto. Todas las entradas de un array se combinan en un solo tipo: un campo que falta en una entrada sigue en la clase, pero con un tipo envoltorio como Integer, Double o Boolean para que pueda valer null. Los enteros pasan a int, los que superan unos 2 mil millones a long y los decimales a double; el tipo se lee de cómo está escrito el número, así que 899.0 sigue siendo double. Una clave como "nombre_cliente" pasa al campo nombreCliente, con @JsonProperty("nombre_cliente") para que Jackson la relacione. Elija record para tipos cortos e inmutables desde Java 16.

Esta herramienta también se busca como json a clase java, json to java, json to pojo, convertir json a java, json a java record.

¿Qué es POJO?

Un POJO (Plain Old Java Object) es una clase Java sencilla, sin atarse a ningún framework: campos privados, un constructor sin argumentos y métodos getter/setter para los campos. Jackson, Gson y Spring esperan justo esa forma al convertir JSON en objetos Java, emparejando los nombres de campo con las claves del JSON. Por eso consumir una API desde Java suele empezar por escribir los POJO de sus respuestas.

¿Qué es Record de Java?

Un record es una forma compacta de clase que llegó con Java 16 para transportar datos: la línea record Producto(String producto, int cantidad) {} genera sola los campos, el constructor, los accesores, equals y hashCode. Un record es inmutable: sus campos no cambian después de crearse. Jackson lee records directamente desde la versión 2.12. Encajan con respuestas de API que se leen y se muestran.

¿Cuál es la diferencia entre un POJO y un record en Java?

Un POJO es la clase clásica con un getter y un setter por campo: es largo, pero funciona en cualquier versión de Java y el objeto se puede cambiar después de leerlo. Un record describe los mismos datos en una línea; el compilador genera accesores, equals, hashCode y toString. Requiere Java 16 o posterior y es inmutable. Jackson lee ambos (records desde 2.12). Para código que lee y muestra una respuesta de API, un record basta con menos líneas; si edita el objeto y lo devuelve, use un POJO.

Cómo se deducen los tipos: combinación, tipos envoltorio, nombres

La herramienta deduce a partir de un solo ejemplo: cuantas más variantes muestre su ejemplo, más exacta será la clase. Las entradas de un array se combinan en un tipo: si el primer producto tiene descuento y el segundo no, descuento sigue en la clase, pero como Double en lugar de double, porque Jackson deja en null un campo que falta y un double primitivo no puede valer null. Un campo visto como null también usa tipo envoltorio; un campo que solo fue null no tiene tipo conocido y pasa a Object.

Si un campo muestra tipos distintos (número en una entrada, texto en otra), el tipo común es Object; un array vacío pasa a List<Object>. Las palabras reservadas de Java como class o default no pueden ser nombres de campo: reciben un guion bajo final y el nombre original queda en @JsonProperty. Si el nombre de clase que sale de una clave choca con un tipo de Java como String o List, se le añade un 2.

  • [{"a":1},{"b":2}] → Integer a; Integer b; (cada uno falta en un registro)
  • {"nota": null} → Object nota (tipo desconocido)
  • {"total": 899.0} → double (se tiene en cuenta el .0 del JSON)
  • {"nombre_cliente": "x"} → @JsonProperty("nombre_cliente") String nombreCliente

Clase o record, y límites honestos

El estilo clase funciona en cualquier versión de Java y con la configuración por defecto de Jackson, Gson y Spring: campos privados más un getter y un setter por campo; el getter de un boolean se llama isX. El estilo record existe desde Java 16: los campos son parámetros del constructor, el tipo es inmutable y Jackson 2.12 o posterior lo lee directamente. Elija clase si su equipo usa un Java más antiguo o si modifica el objeto después de leerlo.

Límites honestos: las fechas en texto (2026-09-27) no pasan a LocalDate y los conjuntos de valores fijos no pasan a enum; quedan como String. Los nombres JSON poco comunes (con espacios, acentos o ñ) se adaptan para Java y @JsonProperty conserva el original. Si no usa Jackson, quite el import y las anotaciones o cámbielas por el equivalente de su biblioteca (@SerializedName en Gson).

Preguntas frecuentes

¿Cómo creo una clase Java a partir de un JSON?

Pegue un JSON de ejemplo en el panel izquierdo de esta página y escriba el nombre de la clase raíz. A la derecha aparece una clase Java con los objetos anidados como clases internas estáticas y los getters y setters listos. Copie el código y guárdelo en su proyecto con el nombre de la clase raíz (por ejemplo Pedido.java).

¿Por qué algunos campos son Integer y no int?

Ese campo falta en algunas entradas de un array o era null en el JSON. Jackson deja en null un campo faltante o null, y un int primitivo no puede valer null, por eso se escribe Integer. Si está seguro de que cada campo siempre existe, ponga Campos faltantes o null en Obligatorio y se usará int.

¿Por qué se agregó una anotación @JsonProperty?

Cuando una clave JSON no sigue la convención de nombres de Java (nombre_cliente, fecha-alta), el nombre del campo pasa a camelCase: nombreCliente. Para que Jackson relacione ese campo con la clave correcta al leer, el nombre original se escribe en @JsonProperty("nombre_cliente"). Las claves que ya están en camelCase no llevan anotación.

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

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