Generar JSON con Groovy 1.8

Una de las muchas novedades que vinieron con Groovy 1.8 fue el soporte nativo para generar y leer JSON.

Llevo un par de días estando trabajando con este soporte JSON para reunir datos importados de distintas fuentes, y luego poder mantener los datos resultantes en un formato estructurado. Principalmente porque no todos son necesarios a día de hoy, pero a futuras se puede echar mano de ellos.

Después de hacer todo lo necesario unificar todos los datos en un map en memoria, para persistir el JSON, he hecho uso de JsonBuilder.

Sería algo así:

def builder = new groovy.json.JsonBuilder()
builder.data(){
  for (item in items){
    "${item['name']}"() {
      zone(item['zone'])
      position(item['position'])
      ....
      ....
    }
  }
}

Esto lo que generaría es algo de una estructura como:

{"data":
  {"name1": { "zone" : "zone1", "position": "position1", ... }}
  {"name2": { "zone" : "zone2", "position": "position2", ... }}
  ...
  ...
}

Después tan sólo debía escribirlo en un fichero:

new File("path/to/file.json").write(builder.toString())

Y listo.

3 comentarios en “Generar JSON con Groovy 1.8

  1. Básicamente el JSON es un string con un formato concreto y predefinido. ¿Hasta que punto te facilita el trabajo una herramienta de este tipo? He trabajado recientemente con JSON y no le veo la dificultar, cierto es que utilicé una API que te convierte el JSON en un object con la estructura definida en el mismo, pero la generación del JSON es realmente sencilla.

  2. Interesante!

  3. @GarrasRojas efectivamente JSON no es más que contenido de texto con formato estructurado. Igual que muchos usos que se le da a XML.

    Aunque sea posible escribirlo “a pelo”, el utilizar alguna herramienta de este tipo puede evitar posibles errores en le generación, más si hablamos de estructuras más complejas, donde también se gana legibilidad del código.
    Por otro lado, otra de las ventajas de JsonBuilder es que facilita bastante el mapeo de Collections de objetos simples a JSON.

    Pero en fin, de todos modos es una alternativa más, hasta donde yo sé hay bastantes librerías que hacen cosas parecidas.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>