logo

Librería Gson de Google

En este proyecto ir a GitHub vamos a ver como la librería gson de Google facilita mucho el trabajo a la hora de leer (deserializar) y escribir (serializar) archivos JSON. Para ello comenzamos añadiendo la dependencias necesarias a nuestro proyecto.

Las dependencias
pom.xml

<dependencies>
  <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <!-- commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
    <!-- gson -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.2</version>
    </dependency>
  </dependencies>
            

Aunque no vamos a hacer test unitarios, añadimos la dependencia junit porque a todos los proyectos java de verdad hay que hacerle test aunque sean obviedades.

El modelo
User.java

package es.json.model;

import java.util.List;

/**
 * 
 * @author Usuario
 *
 */
public class User {
  
  private int id;
  private String name;
  private String password;
  private List languages;
  
  /**
   * Empty constructor
   */
  public User() {
    
  }
  
  /**
   * Overloaded constructor
   * @param id
   * @param name
   * @param password
   */
  public User(int id, String name, String password, List languages) {
    this.id = id;
    this.name = name;
    this.password = password;
    this.languages = languages;
  }

  // setterd and getters

}
            

El proyecto consta de una clase User con cuatro campos (id, name, password y languages) que es la estructura de datos que vamos a convertir a json para después leerla, todo ello con la librería gson.

Para ello, creamos unos objetos de la clase User que guardaremos en un ArrayList. Logicamente en un proyecto de verdad, estos "usuarios" los obtendriamos de una base da datos, por ejemplo, pero aquí, introduciremos unos cuantos al azar, pues la finalidad del proyecto es probar la librería.

Una vez caragado el ArrayList con los usuarios, lo serializamos con el método toJson() de la clase Gson. Posteriormente lo guardamos en un archivo user.json ,es aquí donde nos hace falta echar mano de la librería commons-io, para finalmente deserializarlo con el método fromJson() de la misma clase que el anterior y poderlo leer, en este caso, de la consola de eclipse.

El serializador
WriteJSON.java

package es.json.serialization;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;

import com.google.gson.Gson;

import es.json.model.User;

/**
 * An example of serialization of a series of objects of the User class to a JSON
 * @author WANCHOPI
 */
public class WriteJSON {
  
  /*
   * Constructor
   */
  public WriteJSON() {
    
    List%lt;User> users = new ArrayList<User>();
    
    users = loadUsers();
    
    String json = new Gson().toJson(users);
    saveJSON(json);
    
  }

  private void saveJSON(String json) {
    
    File file = new File("json/user.json");

    try {
      FileUtils.touch(file);
      FileUtils.writeStringToFile(file, json, "iso-8859-1");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
  }

  private List<User> loadUsers() {

    List<User> users = new ArrayList<User>();
    
    List<String> languagesUser1 = new ArrayList<String>();
    languagesUser1.add("Java");
    languagesUser1.add("Python");
    User user1 = new User(1, "Óscar", "1111", languagesUser1);
    
    List<String> languagesUser2 = new ArrayList<String>();
    languagesUser2.add("Javascript");
    languagesUser2.add("Python");
    languagesUser2.add("PHP");
    User user2 = new User(2, "Álvaro", "2222", languagesUser2);
    
    List<String> languagesUser3 = new ArrayList<String>();
    languagesUser3.add("Javascript");
    languagesUser3.add("Python");
    languagesUser3.add("PHP");
    languagesUser3.add("Ruby");
    User user3 = new User(3, "Sonia", "3333", languagesUser3);
    
    users.add(user1);
    users.add(user2);
    users.add(user3);
    
    return users;
  }

}
            
El deserializador
ReadJSON.java

package es.json.deserialization;

import java.io.File;

import org.apache.commons.io.FileUtils;

import com.google.gson.Gson;

import es.json.model.User;


/**
 *
 * @author Usuario
 *
 */
public class ReadJSON {
  
  /**
   * Constructor
   */
  public ReadJSON() {
    
    String jsonFile = readFile();
    Gson gson = new Gson();
    
    User[] users = gson.fromJson(jsonFile, User[].class);
    
    for (User user : users) {
      System.out.println(user);
    }
    
  }

  private String readFile() {
    
    File file = new File("json/user.json");
    String content = "";
    try {
      content = FileUtils.readFileToString(file, "iso-8859-1");
    } catch (Exception e) {
      e.printStackTrace();
    } 
    return content;
  }

}
            

La clase principal simplemente crea dos objetos, un serializador y un deserializador

La clase Main
App.java

package es.json;

import es.json.deserialization.ReadJSON;
import es.json.serialization.WriteJSON;

/**
 * App
 *
 */
public class App {
  
    public static void main( String[] args ) {
        
      new WriteJSON();
      new ReadJSON();
      
    }
}
            

Herramientas y Software

  • Eclipse Version: 2019-03 (4.11.0)
  • Java SE-1.8 (jdk1.8.0)
  • Maven 3.6
  • gson-2.2.2.jar
  • commons-io-2.6.jar
anterior

streams con java8

siguiente

Spring Mvc