Blog de Programación y Diseño Web

Introducción Java y JSON – Segunda parte (Con ejemplo)

Escrito en Json con Java by Andres on the febrero 27th, 2009

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 :P 

        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.

Json firebug

Json Firebug 2


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>
Luego podran acceder a los atributos del objeto de la siguiente manera
objeto.programacion

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 :P )

Ejemplo

9 Responses to 'Introducción Java y JSON – Segunda parte (Con ejemplo)'

Subscribe to comments with RSS or TrackBack to 'Introducción Java y JSON – Segunda parte (Con ejemplo)'.

  1. [...] Segunda parte [...]

  2. Christian Ortiz said, on marzo 25th, 2010 at 11:49

    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

  3. Andres said, on marzo 28th, 2010 at 16:14

    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.

  4. Cristina said, on abril 3rd, 2010 at 9:21

    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

  5. Cristina said, on abril 3rd, 2010 at 9:25

    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

  6. Andres said, on abril 6th, 2010 at 11:08

    @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.

  7. Alex said, on septiembre 20th, 2010 at 13:53

    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

  8. charly said, on octubre 5th, 2010 at 2:29

    hola :D ! @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…

  9. Andres said, on noviembre 6th, 2010 at 0:28

    @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.

Dejame tu comentario