Introducción Java y JSON – Segunda parte (Con ejemplo)
Esta es la segunda entrega de Introducción a Json con Java y aquí veremos un ejemplo mas robusto y práctico de utilizar Java para generar objetos con la notación que nos exige Javascript osea JSON.
I: El requerimiento.
El webmaster del sitio del festival del viña nos pide la parrilla programática para incluirla en varias partes del sitio, como solución a su requerimiento nosotros le planteamos el uso de JSON.
Los detalles del requerimiento, es que la programación del festival debe estar separado por los dias y que pueda estar sujeto a cambios, por este motivo utilizaremos Java para crear los objetos JSON.
II: Creando las clases con JAVA
Necesitamos la clase Festival, Programa y Artista.
Clase Artista
public class Artista {
public String nombre;
public String categoria;
public Artista() {
}
public Artista(String nombre, String categoria) {
this.nombre = nombre;
this.categoria = categoria;
}
}
Clase Programa
public class Programa {
public String dia;
public List<Artista> artistas;
public Programa(){}
public Programa(String dia, List<Artista> artistas){
this.dia = dia;
this.artistas = artistas;
}
}
Clase Festival
public class Festival {
public String nombre;
public List<Programa> programacion;
public Festival(){
}
public Festival(String nombre, List<Programa> programacion){
this.nombre = nombre;
this.programacion = programacion;
}
}
III:Implementación
Luego que tenemos las clases, las instaciamos y llenamos la data manualmente. Cabe destacar que esto perfectamente puede ser extraido de una DB u otro source, pero consultas a DB no esta en el alcance de este documento.
public class Main {
//Creando Listas de artistas
public static void main(String[] args) {
//Creando Artistas
List<Artista> lunes = new ArrayList<Artista>();
List<Artista> martes = new ArrayList<Artista>();
List<Artista> miercoles = new ArrayList<Artista>();
List<Artista> jueves = new ArrayList<Artista>();
List<Artista> viernes = new ArrayList<Artista>();
List<Artista> sabado = new ArrayList<Artista>();
//Creando Programacion
List<Programa> programacion = new ArrayList<Programa>();
lunes.add(new Artista("J. Manuel Serrat", "Musico/Cantante"));
lunes.add(new Artista("Camila", "Musico/Cantante"));
lunes.add(new Artista("La Noche", "Musico/Cantante"));
programacion.add(new Programa("Lunes", lunes));
//Martes 24:
martes.add(new Artista("Juanes", "Musico/Cantante"));
martes.add(new Artista("Fernando Ubiergo", "Musico/Cantante"));
martes.add(new Artista("KC and the Sunshine Band", "Musico/Cantante"));
programacion.add(new Programa("Martes", martes));
//Miércoles 25:
miercoles.add(new Artista("Carlos Santana", "Musico/Cantante"));
miercoles.add(new Artista("Dinamita Show", "Musico/Cantante"));
miercoles.add(new Artista("Roger Hodgson", "Musico Cantante"));
programacion.add(new Programa("Miercoes", miercoles));
//Jueves 26:
jueves.add(new Artista("Simply Red", "Musico/Cantante"));
jueves.add(new Artista("Manpoval", "Musico/Cantante"));
jueves.add(new Artista("Paolo Meneguzzi", "Musico/Cantante"));
jueves.add(new Artista("R.K.M. Y KEN Y", "Musico/Cantante"));
programacion.add(new Programa("Jueves", jueves));
//Viernes 27:
viernes.add(new Artista("Luis Fonsi", "Musico/Cantante"));
viernes.add(new Artista("Daddy Yankee", "Musico/Cantante"));
programacion.add(new Programa("Vienres", viernes));
//Sábado 28:
sabado.add(new Artista("Natalino", "Musico/Cantante"));
sabado.add(new Artista("Marc Anthony", "Musico/Cantante"));
programacion.add(new Programa("Sabado", sabado));
//Ya con todos los datos, creamos el Festival de viña
Festival festival2009 = new Festival("Viña 2009 50 años", programacion);
}
}
Finalmente convertimos nuestro objeto festival2009 a JSON
<span style="white-space:pre"> </span> Gson gson = new Gson();
String jsonOutput = gson.toJson(festival2009);
System.out.println("txt: "+jsonOutput);
El output generado por google queda de la siguiente manera
{
"nombre": "Viña 2009 50 años",
"programacion": [
{
"dia": "Lunes",
"artistas": [
{
"nombre": "J. Manuel Serrat",
"categoria": "Musico/Cantante"
},
{
"nombre": "Camila",
"categoria": "Musico/Cantante"
},
{
"nombre": "La Noche",
"categoria": "Musico/Cantante"
}
]
},
{
"dia": "Martes",
"artistas": [
{
"nombre": "Juanes",
"categoria": "Musico/Cantante"
},
{
"nombre": "Fernando Ubiergo",
"categoria": "Musico/Cantante"
},
{
"nombre": "KC and the Sunshine Band",
"categoria": "Musico/Cantante"
}
]
},
{
"dia": "Miercoes",
"artistas": [
{
"nombre": "Carlos Santana",
"categoria": "Musico/Cantante"
},
{
"nombre": "Dinamita Show",
"categoria": "Musico/Cantante"
},
{
"nombre": "Roger Hodgson",
"categoria": "Musico Cantante"
}
]
},
{
"dia": "Jueves",
"artistas": [
{
"nombre": "Simply Red",
"categoria": "Musico/Cantante"
},
{
"nombre": "Manpoval",
"categoria": "Musico/Cantante"
},
{
"nombre": "Paolo Meneguzzi",
"categoria": "Musico/Cantante"
},
{
"nombre": "R.K.M. Y KEN Y",
"categoria": "Musico/Cantante"
}
]
},
{
"dia": "Vienres",
"artistas": [
{
"nombre": "Luis Fonsi",
"categoria": "Musico/Cantante"
},
{
"nombre": "Daddy Yankee",
"categoria": "Musico/Cantante"
}
]
},
{
"dia": "Sabado",
"artistas": [
{
"nombre": "Natalino",
"categoria": "Musico/Cantante"
},
{
"nombre": "Marc Anthony",
"categoria": "Musico/Cantante"
}
]
}
]
}
IV: Despliegue en web:
Hay muchas formas de desplegar esto en web, si tienen firebug copien y pegen la siguiente linea en la consola.


objeto = {"nombre":"Vi\u00f1a 2009 50 a\u00f1os","programacion":[{"dia":"Lunes","artistas":[{"nombre":"J. Manuel Serrat","categoria":"Musico/Cantante"},{"nombre":"Camila","categoria":"Musico/Cantante"},{"nombre":"La Noche","categoria":"Musico/Cantante"}]},{"dia":"Martes","artistas":[{"nombre":"Juanes","categoria":"Musico/Cantante"},{"nombre":"Fernando Ubiergo","categoria":"Musico/Cantante"},{"nombre":"KC and the Sunshine Band","categoria":"Musico/Cantante"}]},{"dia":"Miercoes","artistas":[{"nombre":"Carlos Santana","categoria":"Musico/Cantante"},{"nombre":"Dinamita Show","categoria":"Musico/Cantante"},{"nombre":"Roger Hodgson","categoria":"Musico Cantante"}]},{"dia":"Jueves","artistas":[{"nombre":"Simply Red","categoria":"Musico/Cantante"},{"nombre":"Manpoval","categoria":"Musico/Cantante"},{"nombre":"Paolo Meneguzzi","categoria":"Musico/Cantante"},{"nombre":"R.K.M. Y KEN Y","categoria":"Musico/Cantante"}]},{"dia":"Vienres","artistas":[{"nombre":"Luis Fonsi","categoria":"Musico/Cantante"},{"nombre":"Daddy Yankee","categoria":"Musico/Cantante"}]},{"dia":"Sabado","artistas":[{"nombre":"Natalino","categoria":"Musico/Cantante"},{"nombre":"Marc Anthony","categoria":"Musico/Cantante"}]}]}
<div>
V: Ejemplo funcional en XHTML, JQUERY y JSON
El como hice esto, quedará para un proximo documento pero coloco el link del ejemplo (totalmente robable
)
[...] Segunda parte [...]
Buen dia estoy super empezando con programacion web tengo experiencia en Desktop una preguntica el output generado por json me serviria para que para ser enviado al cliente y procesado como ajax es decir modificar el DOM y modificar la pagina o algo claro sin actualizar toda la pagina BackStage. disculpa mi ignoracia estoy newbie
Estimado Christian, JSON es como el XML pero mas liviano, la idea es devolver del servidor SOLO DATOS y procesarlos en el cliente (browser).
La idea es que AJAX transporte datos limpios (SIN HTML) con JSON y que la modificación en la página (DOM) se realice con Javascript.
Si sigues teniendo dudes en volver a preguntar.
Estoy intentando transformar una respuesta que recibo de un servidor a formato JSON.Éste servidor realmente me esta devolviendo un obejto JSON pero el metodo de RequestCallback de java tiene interno 2 metodos con cabeceras establecidas,y el metodo
Estoy intentando transformar una respuesta que recibo de un servidor a formato JSON.Éste servidor realmente me esta devolviendo un obejto JSON pero el metodo de RequestCallback de java tiene interno 2 metodos con cabeceras establecidas,y el metodo que recibe la respuesta tiene en la cabecera que recibe un objeto Response.
El cual pretendo pasar a JSON como indicais :
Gson gson = new Gson();
String jsonOutput = gson.toJson(response); //siendo response la respuesta del servidor
He importado las librerias:gson-1.4.jar , gson-1.4-javadoc.jar y gson-1.4-sources.jar.
Y me da el fallo: No source code is available for type com.google.gson.Gson; did you forget to inherit a required module?
Y no se porque.¿Alguien tiene una idea?Gracias de antemano
@Cristina, ese error corresponde a que tu IDE esta tratando de encontrar los archivos fuentes de GSON que no son necesarios para el funcionamiento de este.
Para que el GSON funcione debes cargar solamente la libreria gson-1.4.jar en tu carpeta de librerias, por defecto en proyecto/web-inf/lib (opcionalmente gson-1.4-javadoc.jar).
En resumen, copias el JAR en la carpeta de librerias, refrescas el proyecto, compilas y pruebas. Cuentame si te funcionó. Saludos.
Hola Andrés; Bien por el tutorial, yo tengo una duda y es sobre lo mismo, mi sitio recoge los datos con un Jsp leo los componentes con Jquery en mi archivo .js, e invoco mi servlet con $.ajax() Mi servlet con request obtiene los valores y buenos los descargo a mi Base de Datos y todo bien cuando es un sólo ID, hasta ese punto.
Mi problema es cuando realizo un pedido por poroveedor, lleno filas de producto, costo y precio por proveedor cuando quiero guardar van varias filas con diferente Id de igual forma con jquery y la funcion each recorro los componentes y genero un Json el cual le paso a mi Servlet con jquery $.ajax() y si le llega un string {pza:23,modelo:fx7701,costo:230.00,precio:300.00,pza:2,modelo:cq0001,costo:200.00,precio:400.00} como vez son dos productos que van a un mismo pedido.
Como puedo recorrer esto en el Servlet poder saber su tamaño o poder leer su id para cortarlo cuando llegue al final del primer reagistro.
Ya tengo muchos días atorado con esto y voy a tener que hacerlo con un ArrayList o con sessiones pero me imagino que si se puede con un objeto Json Me podrías dar una pista. mil gracias
hola
! @Andres ese paso tambien lo he echo, pero pareciera que no me reconoce tomcat6 mi WEB-INF/lib… solo agregándolas a las variables de entorno. :s…
@Alex, te recomiendo utilizar el método fromJson(String) que a partir de un String JSON puedes crear un objeto JAVA. Lo primero que debes hacer es crear una clase JAVA que se adecue al JSON, es decir con los mismos atributos y sus metodos getter and setter.
Es algo complicado escribirlo en un comentario pero veré si escribo una versión actualizada de la deserialización con JAVA de un string JSON.