Convertir objetos Java a JSON y de regreso

20 septiembre 2019

Convertir objetos Java a JSON y de regreso

Publicado el 10 julio, 2018 por Fernando Betancourt.

JSON

El formato JSON se a convertido rápidamente en un estándar en como enviar y recibir información a y desde un webservice, si bien es un formato que se originó en JavaScript usarlo en Java es muy sencillo gracias a la librería Gson.

Gson

Gson es una librería en Java creada por Google que permite convertir un objeto Java a JSON y un JSON a un objeto Java, su uso es increíblemente sencillo, por eso se lo recomiendo.

Convirtiendo un Objeto Java a JSON.

Como primer ejemplo veamos como se convierte un objeto Java a JSON, para esto necesitara crear un objeto de clase Gson el cual se encargara de realizar la conversión y además deberá de asegurarse que la clase del objeto que desea convertir tenga todos los getter y setter necesarios, como se ve a continuación.

DetallesVenta.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

package mx.com.pydee.jsonexample;

 

import java.math.BigDecimal;

 

/**

 *

 * @author David

 */

public class DetallesVenta {

    private String producto;

    private BigDecimal importe;

    private BigDecimal precioUnitario;

    private Integer cantidad;

     

    public DetallesVenta(String prod, BigDecimal pu, BigDecimal imp, Integer cant) {

        producto = prod;

        precioUnitario = pu;

        importe = imp;

        cantidad = cant;

    }

 

    /**

     * @return the producto

     */

    public String getProducto() {

        return producto;

    }

 

    /**

     * @param producto the producto to set

     */

    public void setProducto(String producto) {

        this.producto = producto;

    }

 

    /**

     * @return the importe

     */

    public BigDecimal getImporte() {

        return importe;

    }

 

    /**

     * @param importe the importe to set

     */

    public void setImporte(BigDecimal importe) {

        this.importe = importe;

    }

 

    /**

     * @return the precioUnitario

     */

    public BigDecimal getPrecioUnitario() {

        return precioUnitario;

    }

 

    /**

     * @param precioUnitario the precioUnitario to set

     */

    public void setPrecioUnitario(BigDecimal precioUnitario) {

        this.precioUnitario = precioUnitario;

    }

 

    /**

     * @return the cantidad

     */

    public Integer getCantidad() {

        return cantidad;

    }

 

    /**

     * @param cantidad the cantidad to set

     */

    public void setCantidad(Integer cantidad) {

        this.cantidad = cantidad;

    }

}

Esto es necesario ya que de otro modo le objeto Gson mandara errores de acceso a las propiedades del objeto.

Ya que halla cumplido esos dos detalles la conversión es tan sencilla como llamar al método toJson del objeto Gson, como se ve a continuación.

toJson.java

1

String JSON = gson.toJson(detalle1);

Y el resultado se vera mas o menos asi

json.js

1

{"producto":"Aceite","importe":120.0,"precioUnitario":12.00,"cantidad":10}

Si el objeto que convirtió a JSON contenia un arreglo de objetos estos se agregaran con la notación adecuada, como se ve a continuación

jsonarray.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

{

    "fecha": "Jul 10, 2018 1:12:58 AM",

    "cliente": "CLIENTE DE PRUEBA",

    "detalle": [{

        "producto": "Aceite",

        "importe": 120.0,

        "precioUnitario": 12.00,

        "cantidad": 10

    }, {

        "producto": "Anticongelante",

        "importe": 90.0,

        "precioUnitario": 45.00,

        "cantidad": 2

    }, {

        "producto": "Reparacion Rin",

        "importe": 400.0,

        "precioUnitario": 400.00,

        "cantidad": 1

    }]

}

Convirtiendo de JSON a Objetos Java

Al usar un webservice no solo enviaremos información en forma de JSON sino que también la recibiremos en el mismo forma, asi que veamos como convertir de JSON a un objeto Java, la misma observación aplica aquí, el objeto receptor debe de tener todos los getter y setters necesarios o tendrá un error de conversión

Report this ad

El método usado para realizar la conversión es fromJson el cual toma dos argumentos, la cadena String con el JSON y la clase del objeto al que queremos convertir el Json.

Con la cadena de texto debe recordar un detalle importante y es que las comillas dobles son caracteres reservados en Java por lo que recomiendo revisar el Json que regreso el webservice y remplazar esas por comillas simples, para evitar problemas de conversión.

Con respecto a la clase del objeto esa se obtiene facilmente con la propiedad .class de la clase que deseamos usar

Para simplificar las cosas a continuación se presenta un ejemplo

fromJson.java

1

2

3

String jsonComplejo = "{'fecha':'Jul 9, 2018 3:37:49 PM','cliente':'LIMPIEZA Y ASEO PROFESIONAL','detalle':[{'producto':'Cloro','importe':150.0,'precioUnitario':15.00,'cantidad':10},{'producto':'Escoba','importe':30,'precioUnitario':30.00,'cantidad':1},{'producto':'Aromatizante ambiental','importe':100.0,'precioUnitario':10.00,'cantidad':10}]}";

 

Venta venta2 = gson.fromJson(jsonComplejo, Venta.class);

Como notara la conversión puede encargarse sin problemas de un arreglo contenido

Referencias.

Pagina oficial de Gson: https://github.com/google/gson

 

Espero que esta entrada fuera de utilidad y si lo fue y quiere cooperar con la causa tengo una pagina en http://betha.surge.sh para aceptar donativos

 

Más publicaciones de interés