El formato JSON es el más utilizado para el intercambio de datos en la Web. Vamos a ver como llamar a un servicio Web desde una aplicación C/C++ y "traducir" su respuesta JSON a los objetos que forman el modelo de datos.
JSONJavaScript Object Notation, es un formato de datos en modo texto que permite representar de manera sencilla tipos básicos, objetos y arrays. Aunque su uso se ha popularizado en el ámbito Web puede utilizarse también para otros fines, como por ejemplo, archivos de configuración o intercambio local. Su sintaxis es fácil de entender para los humanos y sencilla de procesar para las máquinas. En (Listado 1) reproducimos un pequeño fragmento de la respuesta JSON de un servicio Web de ejemplo:
Listado 1: Fragmento JSON devuelto por un Web Service.
En su estructura podemos encontrar estos tipos de datos:
Booleanos: Representados por las constantes true o false.
Números: Utiliza la notación exponencial de C para valores en coma flotante: 23, .76, -0.54 o 5.6e12 son ejemplos válidos de valores numéricos. JSON no distingue entre enteros, negativos o reales.
Cadenas: Cualquier texto entre comillas se considera una cadena. Admite cualquier carácter Unicode en UTF-8 o mediante la secuencia de escape \uXXXX para indicar el codepoint.
Objetos: Están delimitados por llaves y compuestos por varios campos separados por comas. Cada campo lo forman un identificador (cadena) seguido del carácter dos puntos y un valor que puede ser cualquier tipo simple, objeto u array (Listado 2).
Arrays: Listas de valores delimitados por cochetes [ ... ] y separados por comas. Los valores no tienen porqué ser del mismo tipo como suele ocurrir en algunos lenguajes de programación (Listado 3).
Binarios: JSON no soporta datos binarios por lo que objetos opacos (imágenes, por ejemplo) deben ser codificados en texto y transmitidos como un valor de tipo cadena. El formato más extendido y soportado globalmente es el Base64 donde cada carácter representa 6 bits de información.
1. Llamar a un servicio Web
Lo primero que debemos hacer es conectar con servicio Web mediante HTTP para realizar la consulta y obtener el JSON de respuesta. Tenemos dos formas de hacerlo. La más directa es utilizar el método http_dget (Listado 4).
Esta llamada es muy simple y útil para obtener recursos de forma directa, donde no es necesario indicar parámetros ni configurar la petición. Para otro tipo de peticiones, deberemos crear un objeto Http (Listado 5).
Listado 5: Llamada a un servicio Web con parámetros
Si todo ha ido bien, tendremos en Stream *stm la respuesta del servidor en ambos casos. El siguiente paso será "parsearla" para convertir la secuencia de caracteres que forman el JSON a objetos binarios para su uso desde la aplicación (Listado 6). En Lectura JSON se detalla como vincular los campos del JSON mediante el registro DBind.