Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: CaTZ en 29 Septiembre 2014, 15:49 pm



Título: Petición JSON en Java
Publicado por: CaTZ en 29 Septiembre 2014, 15:49 pm
Buenas,

Antes de nada decir que no pido una solución, sino simplemente una idea de lo que debería de hacer, ya que estoy un poco verde en este tema.

Mi problema es el siguiente:

Tengo que mostrar en el navegador una tabla (esto no hay problema xD), y que al cargar la tabla se invoque una URL mediante JSON que recupere los datos de una Base de Datos y los muestres en la tabla.

Probablemente sea una tontería pero ahora mismo no se por donde agarrarlo.

¿Alguien me podría guiar en los pasos que debo seguir para conseguir esto?

Muchas gracias de antemano.

Edit: Perdón, lo quería poner en el foro de Java y sin querer lo he puesto en Programación General.


Título: Re: Petición JSON en Java
Publicado por: engel lex en 29 Septiembre 2014, 16:04 pm
recomiendo usar jquery, en ese caso es como explican en este link http://www.w3schools.com/jquery/ajax_getjson.asp (http://www.w3schools.com/jquery/ajax_getjson.asp)

si lo vas a hacer directo
es más largo... algo como esto...

Código
  1. var xmlhttp;
  2. var cadenajson;
  3. var url = "miPaginaConJSON.com"
  4.  xmlhttp=new XMLHttpRequest();
  5.  xmlhttp.onreadystatechange=function(){
  6.  if (xmlhttp.readyState==4 && xmlhttp.status==200){//si se cargo y la pagina esta bien
  7.    cadenajson=xmlhttp.responseText;
  8.    }
  9.  }
  10. xmlhttp.open("post",url,false);//usar true si se quiere asincrono
  11. xmlhttp.send();
  12. var objetoJSON=JSON.parse(cadenajson);
  13.  

que valga, que coloco tooodo este código, porque eso sería lo mínimo para hacer la petición ajax y parsear json


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 29 Septiembre 2014, 16:31 pm
Muchas gracias por la respuesta engel lex.

Si no es mucha molestia tengo unas cuantas dudas (seguramente debido a mi desconocimiento tanto de JSON como de Java).

Si yo quiero coger unos datos de la Base de Datos y formatearlos con JSON, ¿Cómo debería de recoger los datos?¿La URL a que se refiere exactamente? Hasta el momento lo que siempre había hecho era hacer una consulta con Hibernate y mostrar los datos en la tabla, ya que la tabla estaba pintada con JSF, pero ahora la tabla la pintamos directamente en código Java y con lo de JSON estoy perdido...

Muchas gracias!


Título: Re: Petición JSON en Java
Publicado por: engel lex en 29 Septiembre 2014, 16:40 pm
la url es la direccion de la pagina web de donde va a recoger los datos

para sacar los datos si por lo menos el servidor es en php, tendrías que hacer el query a la base de datos, meter los datos en un array y usar json_encode (http://php.net/manual/es/function.json-encode.php) para dejarlos en formato JSON



Título: Re: Petición JSON en Java
Publicado por: Pablo Videla en 29 Septiembre 2014, 16:53 pm
Primero debes tener claro como generar un objeto json y array de json en java, te dejo algo que te puede servir

http://foro.elhacker.net/java/consulta_sobre_los_map_java-t350890.0.html


Esta información no responde tu duda, pero si te va dando más datos , de a poco vas armando el rompecabezas.

Y por si no conoces la estructura JSON

http://www.jsoneditoronline.org/


Título: Re: Petición JSON en Java
Publicado por: MinusFour en 29 Septiembre 2014, 17:16 pm
¿Tienes un objeto JSON con el cual trabajar? ¿o porque estás usando JSON?


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 29 Septiembre 2014, 18:04 pm
Gracias a todos por contestar :)

Ahora mismo me miro tus links DonVidela.

MinusFour estoy usando JSON simplemente porque me han dicho que lo haga de esta forma xD y por eso estoy perdido, porque nunca lo había usado y el tema de recoger los datos de una BBDD, parsearlos con JSON y pintarlos para que lo muestre el navegador pues me suena un poco raro todo :S

Me tengo que poner un poco al día con todo esto xd


Título: Re: Petición JSON en Java
Publicado por: MinusFour en 29 Septiembre 2014, 18:44 pm
¿Entonces ya no estás usando JSF y estás usndo JSPs?

Suponiendo que todo lo quieres hacer através de JSPs, vas a necesitar crearte uno que genere el objeto JSON y otro que lo parsee.

Puedes usar:

https://github.com/douglascrockford/JSON-java


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 29 Septiembre 2014, 18:58 pm
Buenas MinusFour,

No uso ni lo uno ni lo otro. Estamos pintando la tabla directamente en código Java con el framework Vaadin (parecido a Swing). ¿El por qué usar JSON? No lo se, ya que no entiendo mucho de esto :S

En resumen...lo que tendría que hacer es: hacer una consulta a la BBDD y recoger en una lista todos los registros. parsear la lista a un objeto JSON y pintar la tabla con ese objeto, ¿sería así o me lo acabo de inventar y me faltan cosas? xD


Título: Re: Petición JSON en Java
Publicado por: Pablo Videla en 29 Septiembre 2014, 19:05 pm
Tienes algo de codigo? interactuar con objetos JSON es super simple, cuando lo hagas te darás cuenta, si nos puedes aportar con algun codigo te podríamos ayudar de formas mas completa.


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 29 Septiembre 2014, 19:13 pm
Buenas DonVidela,

En el PC que estoy ahora mismo no tengo el código, pero lo que tengo hecho es simplemente pintar la tabla y recoger en una lista todos los registros de la tabla con Hibernate, vamos que me falta el tema de pintar los datos en la tabla sólo.

El caso es que no había hecho nada con JSON porque primero quería enterarme más o menos del tema por no ir ciego del todo xD


Título: Re: Petición JSON en Java
Publicado por: Pablo Videla en 29 Septiembre 2014, 20:11 pm
Código
  1.  
  2.  
  3. $.ajax({
  4.        type: 'POST',
  5.        url: 'inicio.php?code=default&status=getTiposClientes',
  6.        data: '',
  7.        error: function(jqXHR, exception) {
  8.            console.log("Error : " + exception.toString())
  9.        },
  10.        success: function(html) {
  11.  
  12.            console.log("html : " + $(html).find("#getTiposClientes").html());
  13.            var tipoClientes = jQuery.parseJSON($(html).find("#getTiposClientes").html());
  14.            var tablax="TableA1";
  15.            console.log("Largo Tipo Clientes : " + tipoClientes.length);
  16.            for (var i = 0; i < tipoClientes.length; i++) {
  17.                if(i%2==0){
  18.                 tablax="TableA1"
  19.                }else{
  20.                    tablax="TableA2";
  21.                }
  22.                $("#planesClientes").append("<tr class='"+tablax+"'><td>"+tipoClientes[i].strNombreTipoCliente+"</td>"+
  23.    "<td>"+tipoClientes[i].intIndustriasMax+"</td><td>"+tipoClientes[i].intUsuariosMax+"</td>\n\
  24. <td><a href='#;'  onclick='bloquearPlan("+tipoClientes[i].idTipoCliente+");'><img src='url' title='Eliminar' ></a></td></tr>");
  25.            }
  26.        }
  27.    });
  28.  

Asi escribo yo una tabla simple con ajax y JSON  :xD Es una muestra muy básica. Hay soluciones más bonitas.


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 30 Septiembre 2014, 08:22 am
Muchas gracias DonVidela :)

Mira esto es el código que llevo.

Código:
tabla = new Table(properties.getProperty("tabla-nombre"));

tabla.setSelectable(true);

//Creamos las columnas
tabla.addContainerProperty(properties.getProperty("tabla-col1"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col2"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col3"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col4"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col5"), String.class, null);

//Ajustamos el tamaño de la tabla a lo que ocupa
tabla.setPageLength(tabla.size());

PedidosDAO pedidosDao = new PedidosDAO();

List<pedidos> lista = pedidosDao.findAll();

hLayoutTabla.addComponent(tabla);

En lista tengo todos los registros de los pedidos.

Ya me he enterado un poco de como está el tema diseñado. Por otro lado están desarrollando la clase de persistencia y un servicio REST. Lo de la URL que comenté, ¿Es la URL del servicio? y entonces esa URL la parseo a un objeto JSON y con eso ya pinto la tabla, ¿sería ese el procedimiento?

Muchas gracias


Título: Re: Petición JSON en Java
Publicado por: Pablo Videla en 30 Septiembre 2014, 11:30 am
Muchas gracias DonVidela :)

Mira esto es el código que llevo.

Código:
tabla = new Table(properties.getProperty("tabla-nombre"));

tabla.setSelectable(true);

//Creamos las columnas
tabla.addContainerProperty(properties.getProperty("tabla-col1"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col2"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col3"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col4"), String.class, null);
tabla.addContainerProperty(properties.getProperty("tabla-col5"), String.class, null);

//Ajustamos el tamaño de la tabla a lo que ocupa
tabla.setPageLength(tabla.size());

PedidosDAO pedidosDao = new PedidosDAO();

List<pedidos> lista = pedidosDao.findAll();

hLayoutTabla.addComponent(tabla);

En lista tengo todos los registros de los pedidos.

Ya me he enterado un poco de como está el tema diseñado. Por otro lado están desarrollando la clase de persistencia y un servicio REST. Lo de la URL que comenté, ¿Es la URL del servicio? y entonces esa URL la parseo a un objeto JSON y con eso ya pinto la tabla, ¿sería ese el procedimiento?

Muchas gracias

Tu url recibe algun parametro?
Código
  1.        url: 'inicio.php?code=default&status=getTiposClientes',
  2.  

Fijate el codigo que te puse, en el comentario anterior, ahi tienes un ejemplo de url que no recibe nada como parametro sino que va al metodo a través de un case y me imprime lo que te puse en JSON, luego capturo el json lo parseo y lo manipulo.

revisa bien la funcion $.ajax que te puse y ve los parametros que se envian y la respuesta, en el success cuando el ajax responde como corresponde con los datos, yo pinto la tabla con esos datos.


Título: Re: Petición JSON en Java
Publicado por: CaTZ en 30 Septiembre 2014, 12:48 pm
No DonVidela, mir URL no tiene ningún parámetro.

A ver si tengo algo de tiempo y me pongo a picar el código y ver qué se me pasa, pero creo que ya lo voy entendiendo.

  • Implementar la interfaz del Servicio REST
  • Conectarme a la URL del servicio
  • Pasar la URL a objeto JSON
  • Recorrerme la lista para pintar en la tabla

Si es así y no me equivoco, la parte de recogida de datos de la BBDD se hace en la parte del Servicio, ¿no? Yo sólo tendría que parsear la URL y ya está....