¿Qué es JSON y por qué se necesita en Java?
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, fácil de leer para los humanos y fácil de procesar para los programas. En el desarrollo moderno de Java, JSON se utiliza en todas partes: desde archivos de configuración hasta solicitudes API a servicios web.
El trabajo con JSON en Java incluye dos acciones principales:
- Serialización — conversión de un objeto Java a una cadena JSON.
- Análisis (deserialización) — conversión de una cadena JSON de vuelta a un objeto Java.
En esta lección, analizaremos cómo realizar estas operaciones con dos bibliotecas populares: Jackson y Gson. Los ejemplos son adecuados incluso para desarrolladores principiantes.
Preparación del proyecto y conexión de bibliotecas
Para empezar, necesitaremos un proyecto Java. Usaremos Maven para gestionar las dependencias. Cree un nuevo proyecto Maven y agregue las siguientes dependencias al archivo pom.xml:
Agregar Jackson
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.1</version></dependency>Agregar Gson
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.11.0</version></dependency>Ambas bibliotecas se pueden usar simultáneamente en un mismo proyecto. Después de actualizar Maven, las dependencias se descargarán automáticamente.
Creación de una clase Java para el ejemplo
Para la demostración, crearemos una clase simple User, que serializaremos y analizaremos:
public class User { private String name; private int age; private String email;
// Se necesita un constructor vacío para la deserialización public User() {}
public User(String name, int age, String email) { this.name = name; this.age = age; this.email = email; }
// Getters y setters (obligatorios para Jackson) 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; }}Importante: Para el correcto funcionamiento de las bibliotecas, la clase debe tener:
- Un constructor vacío (sin argumentos).
- Getters y setters para todos los campos (obligatorio para Jackson, para Gson es suficiente con los getters).
Serialización de un objeto Java a JSON
La serialización es el proceso de convertir un objeto en una cadena. Veamos ambos enfoques.
Ejemplo con Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); User user = new User("Ana", 25, "anna@example.com");
// Serialización a cadena String json = mapper.writeValueAsString(user); System.out.println(json); }}Resultado de la ejecución:
{"name":"Ana","age":25,"email":"anna@example.com"}Ejemplo con Gson
import com.google.gson.Gson;
public class GsonExample { public static void main(String[] args) { Gson gson = new Gson(); User user = new User("Ana", 25, "anna@example.com");
// Serialización a cadena String json = gson.toJson(user); System.out.println(json); }}El resultado será idéntico. Ambas bibliotecas realizan la tarea igualmente bien.