viernes, 30 de junio de 2017

¿Cómo crear objetos JSON de cero?

Antes de seguir les recomiendo dar una leída a la información del sitio oficial de esta estructura de datos: JSON.

Notarás que en resumen, un objeto del tipo JSON puede contener los siguientes:

Y esto es recursivo, es decir cada nuevo valor del objeto puede a su ver contener cualquiera de los valores mostrados en la imagen anterior.

Haremos un ejemplo en C++, que como siempre es multiplataforma :D



Les haré un ejemplo muy sencillo en C++.

Digamos que queremos armar lo siguiente:


{
 "Book-1": {
  "id":2587,
  "titulo":"Dalila la bella",
  "subtitulo":"Poesia sobre Dalila.",
  "autor":"Sr. Juan Perez",
  "isbn":"777345934500023",
  "categoria":[arte,poesia]
 }
}



Para empezar incluimos lo siguiente en tu archivo "xyz.cpp" o en "xyz.h" dependiendo del uso y alcance que quieras darle a la declaración de tus variables. Por ejemplo si vas a usar objetos JSON como parámetros de funciones, pues tendrás que incluir la siguiente línea en el archivo de cabeceras "xyz.h":


#include <System.JSON.hpp>


Paso siguiente. Nota detenidamente que todas las variables son punteros, quiere decir que cada variable apunta directamente a una dirección de memoria y cualquier acción que realices sobre ellas impactará directamente en su contenido, en memoria.

El siguiente código lo podrías poner en el evento clic de algún botón.


 auto *mainObj = new TJSONObject;
 auto *Obra1 = new TJSONObject;

 mainObj->AddPair("Book-1", Obra1);

 Obra1->AddPair("id", new TJSONNumber(2587));
 Obra1->AddPair("titulo", "Dalila la bella");
 Obra1->AddPair("subtitulo", "Poesia sobre Dalila.");
 Obra1->AddPair("autor", "Sr. Juan Perez");
 Obra1->AddPair("isbn", "777345934500023");

 auto *CatArray = new TJSONArray();

 Obra1->AddPair("categoria", CatArray);
 CatArray->Add(String("arte"));
 CatArray->Add(String("poesia"));

 ShowMessage(mainObj->ToString());



Antes de compilar, es muy importante que desactives el compilador clásico de Boland para que entre en acción C++11 o CLANG. En CLANG no es necesario liberar los objectos porque se libran solos 😄. En caso uses el compilador clásico, no podrás usar la clave "auto", cámbialas al tipo de objeto a crear, y al final de usar los objetos elimínalos, Ej. "delete mainObj;". Te recomiendo usar la cláusula try... __finally para controlar adecuadamente esta acción.

Para esto ve al menú "Project->Options..." o simplemte presiona la combinación de teclas Ctrl+Shift+F11. En la izquierda ve a "C++ Compiler". Luego cambia de true a false la opción del compilador clásico como se muestra en la siguiente imagen.




Luego de ejecutar nuestro ejemplo obtendremos el siguiente resultado:



Muy bueno eh!!

Seguramente notarás que como "Book-1" podrías tener "n" números de books.

Un saludos y bendiciones!