Analizar JSON con objetos dinámicos U2

Por Michael Byrne

3 minutos de lectura

UniVerse y UniData ahora pueden trabajar con JSON o XML como objeto, lo que simplifica la creación o el uso de estos formatos. A partir de UniVerse 11.1 y UniData 7.3, los Objetos Dinámicos U2 (UDO) facilitan el trabajo con estos formatos.

Servicio meteorológico

Para ayudarnos a crear nuestro ejemplo, usaremos un servicio meteorológico en línea gratuito que nos proporciona datos que podemos analizar. Wunderground tiene una API meteorológica para desarrolladores aquí . Consulta los detalles allí. Puedes obtener una cuenta gratuita y el código API para probar el servicio.

 

¿Qué es JSON?

JSON significa Notación de Objetos JavaScript y es una forma independiente del lenguaje de expresar datos, fácil de intercambiar mediante HTTP y comúnmente entendida por muchos lenguajes de software. Si no está familiarizado, probablemente sea mejor que Wikipedia lo explique mejor. Una vez que obtenga su clave API ( ver arriba), puede probar el servicio meteorológico y ver exactamente qué devuelve. A continuación, se muestra un breve fragmento para que pueda ver rápidamente cómo se verá. Es importante que conozca la estructura, ya que su código necesitará saber qué buscar.

{
"respuesta": {
"versión":"0.1",
},
"pronóstico":{
   "simpleforecast": 
"pronóstico del día": [
{"fecha":{
"época":"1421287200",
"pretty": "19:00 MST del 14 de enero de 2015",
....continuado....

El código

Comencemos obteniendo el JSON del servicio meteorológico:

** IMPORTANTE ** Necesitarás obtener tu propia clave API para llamar al servicio
claveAPI = "0123abcd01234abcd"
ciudad = "CO/Denver"
url = "http://api.wunderground.com/api/":apiKey:"/forecast/q/":ciudad:".json"
método = "GET"
solicitud = ""

st = createRequest(url, método, objRequest)
st = submitRequest(objRequest, 3600, "", encabezados, datos, estado https)

En este punto, si todo salió bien, entonces deberíamos tener datos JSON en el parámetro de datos .

SI UDORead(datos, UDOFORMAT_JSON, RESTMSG) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(RESTMSG, "pronóstico", pronóstico, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(pronóstico, "simpleforecast", simple, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(simple, "pronósticodía", arrDays, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR

La función UDORead lee una cadena JSON del primer parámetro y devuelve un objeto UDO en el tercer parámetro si es válido. Observe los parámetros en las siguientes tres llamadas a UDOGetProperty: recorremos el árbol de objetos, desde el objeto pronóstico hasta el objeto simpleforecast y finalmente la matriz forecastday . Una vez que tengamos la matriz forecastday, podemos simplemente recorrer cada elemento y obtener los valores que nos interesen. Simplemente asegúrese de liberar la memoria utilizada por el UDO llamando a UDOFree() al terminar.

BUCLE
GETSTAT = UDOArrayGetNextItem(arrDías, W.UDO, W.TIPO)
MIENTRAS GETSTAT = UDO_SUCCESS HACER
yo = yo + 1
SI UDOGetProperty(W.UDO, "fecha", UDO.FECHA, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(UDO.FECHA, "nombredelmes", F.MES, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(UDO.FECHA, "día", F.DÍA, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(UDO.FECHA, "año", F.AÑO, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(W.UDO, "alto", UDO.ALTO, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(UDO.HIGH, "fahrenheit", HF, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(W.UDO, "bajo", UDO.BAJO, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(UDO.LOW, "fahrenheit", LF, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
SI UDOGetProperty(W.UDO, "condiciones", CONDICIONES, UDOTYPE) NE UDO_SUCCESS ENTONCES GOSUB ERR
IMPRIMIR F.MES:" ":F.DÍA:", ":F.AÑO
IMPRIMIR " Alto: ":HF:" Bajo: ":LF
IMPRIMIR " Condiciones: ":CONDICIONES
IMPRIMIR
REPETIR

SI UDOFree(RESTMSG) NE UDO_SUCCESS ENTONCES GOSUB ERR

 

El resultado

Pronóstico del tiempo para Colorado/Denver

6 de enero de 2015
Máxima: 55 Mínima: 15
Condiciones: Parcialmente nublado

7 de enero de 2015
Máximo: 34 Mínimo: 27
Condiciones: Parcialmente nublado

8 de enero de 2015
Máxima: 46 Mínima: 17
Condiciones: Parcialmente nublado

9 de enero de 2015
Máximo: 32 Mínimo: 18
Condiciones: Claro

 

Obtener el código

Si quieres probar este código, puedes descargarlo desde GitHub

Publicaciones relacionadas

Security & Compliance

Preparación para la facturación electrónica: plazos, requisitos y próximos pasos prácticos

1 minuto de lectura
Preparación para la facturación electrónica: plazos, requisitos y próximos pasos prácticos
Inteligencia artificial (IA)

Presentamos Rocket EVA 2.0

6 minutos de lectura
Rocket EVA 2.0 introduce agentes de IA controlados para operaciones de TI híbridas y de mainframe, lo que ayuda a los equipos a acelerar las investigaciones, ampliar la experiencia y aplicar [...]
Modernización de aplicaciones

Elige el camino correcto para la modernización del código con IA.

3 minutos de lectura
Rocket reconocida como Challenger en el Cuadrante Mágico™ de Gartner® para herramientas de modernización de código aumentadas con IA.