Introducción al trabajo con JSON en Java
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, ampliamente utilizado en aplicaciones web modernas, API y microservicios. En Java, trabajar con JSON es una parte integral del desarrollo: desde la lectura de archivos de configuración hasta la interacción con servicios RESTful. En este artículo, analizaremos en la práctica cómo realizar el análisis (conversión de JSON a objetos Java) y la serialización (conversión de objetos Java a JSON) utilizando las dos bibliotecas más populares: Jackson y Gson.
Veremos ejemplos de código reales, aprenderemos a manejar estructuras anidadas y analizaremos errores típicos. Al final del artículo, podrá trabajar con JSON con confianza en cualquier proyecto Java.
1. Bibliotecas principales para trabajar con JSON
Jackson vs Gson: ¿cuál elegir?
En el mercado de Java existen varias bibliotecas para trabajar con JSON, pero dos de ellas se han convertido en el estándar de facto:
- Jackson — una biblioteca más potente y funcional. Soporta anotaciones, procesamiento en flujo y serializadores personalizados. Se recomienda para proyectos empresariales.
- Gson — una biblioteca simple y ligera de Google. Ideal para proyectos pequeños y prototipado rápido.
Para usar cualquiera de ellas, basta con agregar la dependencia en pom.xml (Maven) o build.gradle (Gradle).
Inclusión de Jackson (Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>Inclusión de Gson (Maven)
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>2. Análisis de JSON: de cadena a objeto Java
El análisis es el proceso de convertir una cadena JSON en un objeto Java. Veamos ambos enfoques con el ejemplo de una clase simple User.
Creación del modelo de datos
public class User { private String name; private int age; private String email;
// ¡Se necesita un constructor vacío obligatoriamente! public User() {}
// Getters y setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}Análisis con Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParsingExample { public static void main(String[] args) throws Exception { String json = "{\\"name\\":\\"Iván\\",\\"age\\":30,\\"email\\":\\"ivan@example.com\\"}"; ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(json, User.class); System.out.println("Nombre: " + user.getName()); System.out.println("Edad: " + user.getAge()); }}Análisis con Gson
import com.google.gson.Gson;
public class GsonParsingExample { public static void main(String[] args) { String json = "{\\"name\\":\\"María\\",\\"age\\":25,\\"email\\":\\"maria@example.com\\"}"; Gson gson = new Gson(); User user = gson.fromJson(json, User.class); System.out.println("Nombre: " + user.getName()); System.out.println("Email: " + user.getEmail()); }}3. Serialización: de objeto Java a JSON
La serialización es el proceso inverso: tomamos un objeto Java y lo convertimos en una cadena JSON. Esto es necesario, por ejem