Hoy en dia nos toca trabajar más y más con el formato JSON en el mundo Java. Hay situaciones en las que nuestro servidor de aplicaciones tiene soporte (JEE6) y otras muchas en las que no y nos tenemos que apoyar en frameworks de terceros (Apache CXF). Por ultimo hay situaciones en las que simplemente tenemos que cubrir de forma rápida el problema y seguir adelante .Es en estas situaciones en las que la libreria de Google (Google JSON) es muy práctica y nos permite generar estructuras JSON de forma sencilla .Vamos a verlo a continuación utilizando un sencillo Servlet. En un primer lugar nuestro Servlet imprimirá por pantalla en formato HTML una lista de objetos dentro de una tabla.
Vamos a mostrar el código fuente de la clase Persona y el del Servlet que imprime una lista de personas :
Persona.java
package com.arquitecturajava.negocio; public class Persona { public Persona(String nombre, int edad) { super(); this.nombre = nombre; this.edad = edad; } private String nombre; private int edad; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } }
ServletDatos.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.arquitecturajava.negocio.Persona; public class ServletDatos extends HttpServlet { private static final long serialVersionUID = 1L; public ServletDatos() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Persona> lista = new ArrayList<Persona>(); lista.add(new Persona("pedro", 20)); lista.add(new Persona("ana", 30)); PrintWriter pw = response.getWriter(); pw.println("<html>"); pw.println("<body>"); for (Persona p : lista) { pw.println("<p>" + p.getNombre()); pw.println(p.getEdad() + "</p>"); } pw.println("</body>"); pw.println("</html>"); } }
El servlet nos mostrará la siguiente información.
Objetos y JSON (GSON)
Realizada esta operación vamos a modificar el Servlet para utilizar la librería de Google (GSON) y que la información que se genere sea en formato JSON.La librería se encuentra disponible en la siguiente URL.
https://code.google.com/p/google-gson/
Instalada la librería modificaremos el Servlet para que genere los datos en formato JSON.
Vamos a ver el código:
package com.arquitecturajava.servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.arquitecturajava.negocio.Persona; import com.google.gson.Gson; public class ServletDatosJSON extends HttpServlet { private static final long serialVersionUID = 1L; public ServletDatosJSON() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Persona> lista = new ArrayList<Persona>(); lista.add(new Persona("pedro", 20)); lista.add(new Persona("ana", 30)); Gson gson= new Gson(); PrintWriter pw=response.getWriter(); pw.println( gson.toJson(lista)); pw.close(); } }
Como podemos ver la libreria es muy sencilla de utilizar . En primer lugar nos creamos un objeto Gson.
Gson gson= new Gson();
Para mas adelante pasarle la lista de personas y que la convierta
pw.println( gson.toJson(lista));
Realizados estos cambios el Servlet devuelve lo siguiente :
Como podemos ver utilizar la librería es muy sencillo
Hola, estoy tratando de implementar un Json que viene desde un PHP, pero no puedo implementar HttpClient para consumirlo, en otro articulo dices que se necesita Java 9, donde puedo ver o actualizar la version de java?
Sino recuerdo mal a nivel de java 9 hay q poner algún parametro extra al ejecutarlo
[…] artículos relacionados: Ejemplo JPA ,Java y JSON , […]
Saludos, espero se encuentren bien. tengo poca experiencia en Java y en estos momentos (cuestiones de horas) debo hacer entrega de un aplicativo que me permita realizar extracciones de datos de una pagina web. Para ello me indicaron que: prodia utilizar import.io, el cual ya lo he utilizado y me genera archivos .json pero no se como vincularlos con java. Lo otro que me remendaron fue que descargara la liberia json en java y desarrollara el extractor desde java. pero no he encontrado dicha libreria, lo que he conseguido es la libreria GSON, y no se si es la misma… Read more »
tendrías que generar los ficheros JSON desde java a traves de un servicio REST.
https://www.arquitecturajava.com/jax-rs-servicios-restfull-en-java/
Hola muy bueno el articulo, una consulta como podria pasar con json un arraylist para que actualize una tabla en un jsp asincorinicamente con ajax, por fa si tuvieras un ejemplo te lo agradeceria ya que necesito actualizar tablas asincronicamente.
De antemano gracias por la respuesta
Este articulo te puede ayudar de mi blog que es como usar plantillas con jquery y json manejo de plantillas/
gracias
Para pasar el resultado a un jtable?
Directamente no . Tendrías que volver ha realizar la conversión inversa ,es decir una vez recibes los datos en json convertirlos otra vez a objetos 🙂
Hola , tengo una consulta , estoy tratando de hacer una aplicación jsf que mande un json a una aplicación android.
Me podrías decir como debería ser la lógica ?
osea aplicacion android manda json a jsf web aplication (servlet ?) lo proceso y lo devuelvo a la aplicacion android
se entiende ?
muchas gracias !
Deberias publicar un servicio REST desde la aplicación JSF . https://www.arquitecturajava.com/jax-rs-servicios-restfull-en-java/
Puues es un buen post. Felicidades de nuevo.
Muy sencilla esta libreria, ademas si tiene un objeto dentro, tambien lo transforma a Json, y puede hacer la operacion contraria, de una String pasarlo a un Objeto:
// Objeto a Json
String json = gson.toJson(new Persona(“rrrrrr”, 555,new Direccion(“via lactea jjaja”,42)));
Persona fromJson = gson.fromJson(json, Persona.class);
System.out.println(json);
//Json a objeto
fromJson.setNombre(“MODIFICADO”);
System.out.println(gson.toJson(fromJson) );
Resultado:
{“nombre”:”rrrrrr”,”edad”:555,”direccion”:{“calle”:”via lactea jjaja”,”numero”:42}}
{“nombre”:”MODIFICADO”,”edad”:555,”direccion”:{“calle”:”via lactea jjaja”,”numero”:42}}
D:
Me alegro te esten siendo útiles 🙂
Gracias por estos aportes muy puntuales, muy interesate todo lo que realizas.
Muchas gracias Luisin .Me alegro de que te sean utiles
[…] 28/08/2013: Java y JSON sencillo Cecilio Álvarez nos muestra en su blog un sencillo ejemplo sobre cómo trabajar con Java y JSON. […]
Woow Cecilio, interesante articulo, gracias por compartir esto. saludos.
Muchas gracias 🙂
hola, se podría consumir un servicio web de java en php con gson???? porque tengo un servicio que reciba un objeto de una clase , como haria para llamarlo en php????
Si lo que quieres decir es : Se puede consumir un servicio Java GSON desde PHP . La respuesta es si . Sin ningún problema ahora bien tendras que utilizar dos cosas . En primer lugar la libreria de php (curl) que haga invocaciones http y nos traiga los datos en formato JSON que están ubicados en el servicio Java .En segundo lugar p las funciones json_encode y json_decode de php para gestionar json que llegue.