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