#1 2015-11-06 22:25:29

Neftalí
Member
Registered: 2015-11-06
Posts: 3

Recoger valor JSON desde un petición

Hola.
Estoy haciendo las primeras pruebas con AppBuilder, así que es posible que esta consulta sea muy básica.

Estoy realizando una aplicación nueva utilizando un HttpClient.
Está configurado con esta dirección:

http://api.openweathermap.org/data/2.5/ … 21d0d40c19

Si accedéis, veréis que devuelve un texto en formato JSON.

Intento recoger esa respuesta un un TextArea utilizando una asignación como esta:

SetVar "[Textarea1.Value]" "[HttpClient1.Response]" "String"

pero lo que obtengo es que en el TextArea aparece:  [object Object]

Captura_169.png

¿Qué estoy haciendo mal?

Gracias.

Offline

#2 2015-11-06 23:50:00

David
Admin
From: Alcobendas, Madrid, Spain
Registered: 2015-04-21
Posts: 1,661
Website

Re: Recoger valor JSON desde un petición

Hola Neftalí,

Un gusto verte también en este foro. No te preocupes que no estás haciendo nada mal. Se trata de que lo que obtenemos en la variable "[HttpClient1.Response]", en este caso, es el propio objeto JSON retornado por el servidor, y, lo que vemos en el Textarea es el resultado del método "toString()" de dicho objeto.

Podemos acceder, directamente, al propio objeto, es decir, podemos escribir algo como esto en el caso del objeto JSON susomentado:

AlertBox "[HttpClient1.Response.message]" "info"

Para una respuesta del servidor tal que esta:

{"message":"accurate","cod":"200","count":1,"list":[{"id":3128760,"name":"Barcelona","coord":{"lon":2.15899,"lat":41.38879},"main":{"temp":16,"pressure":1026,"humidity":93,"temp_min":16,"temp_max":16},"dt":1446840000,"wind":{"speed":1.5,"deg":290},"sys":{"country":"ES"},"clouds":{"all":8},"weather":[{"id":701,"main":"Mist","description":"niebla","icon":"50n"}]}]}

... la acción AlertBox anterior nos mostraría "accurate". Por otro lado, el JSON que nos ocupa es mas o menos "complejo", esto es, el elemento "list" es un Array de objetos, en este caso de un solo objeto. Podríamos también acceder a las propiedades de los objetos de "list" usando un codigo como este:

// Obtenemos el primer objeto del array "list", en realidad sólo tiene un objeto (en el JSON de arriba)
ArrayGetItem "[HttpClient1.Response.list]" "0" "[MyObject]"

// Ahora vamos a obtener la propiedad "name" de dicho primer objeto de "list"
ObjectGetProp "[MyObject]" "id" "[Result]"

// Mostramos el valor de la propiedad "name"
AlertBox "[Result]" "info"

La acción "AlertBox" anterior mostrará "Barcelona". Y, no sé si es necesario, pero, en el caso de que "list" pudiese contener mas de un objeto, podemos conocer el número de estos usando la acción ArrayLength de este modo:

ArrayLength "[HttpClient1.Response.list]" "[ListCount]"

Por lo demás, puesto que lo que obtenemos desde el servidor es para nuestra aplicación un objeto JSON, si quisiésemos mostrar en el Textarea el JSON "como una cadena", podemos usar la acción StrSerialize tal que así:

StrSerialize "[HttpClient1.Response]" "[Textarea1.Value]"

No sé si te he aclarado algo Neftalí.

Muchas gracias por interesarte en App Builder.

Si tienes cualquier otra duda no dejes de decirlo.

Offline

#3 2015-11-07 01:44:13

Neftalí
Member
Registered: 2015-11-06
Posts: 3

Re: Recoger valor JSON desde un petición

David wrote:

...puesto que lo que obtenemos desde el servidor es para nuestra aplicación un objeto JSON, si quisiésemos mostrar en el Textarea el JSON "como una cadena", podemos usar la acción StrSerialize tal que así:

StrSerialize "[HttpClient1.Response]" "[Textarea1.Value]"

No sé si te he aclarado algo Neftalí.

Hola David.

Pues básicicamente esso era lo que estaba intentando y ya me lo has aclarado.
Lo siguiente es "parsear" algunos elementdos del JSON, así que probaré con lo que me has comentado más arriba.

Gracias.

Offline

#4 2015-11-07 01:51:19

David
Admin
From: Alcobendas, Madrid, Spain
Registered: 2015-04-21
Posts: 1,661
Website

Re: Recoger valor JSON desde un petición

Hola Neftalí,

Estupendo. Recuerda que no tendrás que "parsear", en el sentido de que ya tratamos, directamente, con un objeto y sus propiedades. Si tienes cualquier consulta no dejes de decirlo.

Offline

#5 2015-11-07 13:30:10

David
Admin
From: Alcobendas, Madrid, Spain
Registered: 2015-04-21
Posts: 1,661
Website

Re: Recoger valor JSON desde un petición

Hola de nuevo,

Sólo para añadir que App Builder cuenta ahora con dos ejemplos nuevos: JSON y JSON2. El primero muestra cómo acceder a la respuesta JSON de un cliente HTTP tal que cualquier otro objeto. El segundo muestra lo mismo, pero, esta vez la respuesta JSON contiene varios objetos y además cada objeto tiene una propiedad de tipo Array.

Los ejemplos de App Builder se encuentran en el menú Archivo -> Ejemplos

Offline

#6 2015-11-08 16:13:33

Neftalí
Member
Registered: 2015-11-06
Posts: 3

Re: Recoger valor JSON desde un petición

Gracias David.

Es justo lo que pretendo hacer, sólo que las respuestas son algo complejas (bueno, la que has visto en el ejemplo anterior).
Una vez obtenida la respuesta, lo más complejo será posiblemente realizar el "parseo" para obtener los valores.

Un saludo.

Offline

#7 2015-11-08 16:42:08

David
Admin
From: Alcobendas, Madrid, Spain
Registered: 2015-04-21
Posts: 1,661
Website

Re: Recoger valor JSON desde un petición

Hola Neftalí,

Revisa los ejemplos JSON y JSON2 que se han añadido, y, si tienes cualquier duda, no dejes de preguntar. smile

Offline

Board footer

Powered by FluxBB


Copyright ©2018 DecSoft. All rights reserved.