Aca va el detalle de como resolví la cuestión:
El texto de que devuelve mi consulta es el siguiente:
[{“ts”:1531188898077.0,“val”:{“sensor1”:15.5,“sensor2”:16.625,“sensor3”:15.6875}}]
Como se puede ver, en la respuesta está la timestamp y los valores leidos de 3 sensores.
Ahora, supongamos que la variable que quiero recuperar (o mandar por el puerto serie) es la correspondiente al sensor N°1; el código que usé fue el siguiente:
Serial.println (payload.substring(((payload.indexOf("sensor1", ((payload.indexOf("sensor1")))))+9),(payload.indexOf(",", ((payload.indexOf("sensor1")))))));
payload es la variable que guarda la cadena devuelta por la consulta
Esta es la idea de lo que hace el resto:
-
buscar en que n° de caracter (o indice) de la cadena comienza el “nombre” del sensor del que se busca obtener el valor, en este caso “sensor1”. Esto lo hace lo hace la función
indexOf()con la cadena buscada como argumento. -
tomando como base el indice obtenido en el punto anterior, le suma 9 (que es la longitud de la cadena “sensor1” incluidas las comillas, y desde esa posición busca el indice de la primer “,” (coma) que aparezca. Nuevamente la funcion
indexOf()esta vez con dos argumentos, el primero es desde que indice empezar a buscar, el y el segundo el caracter buscado. -
con estos 2 datos ya sabemos la posición dentro de la cadena en la que se encuentra nuestra variable, y usamos la función substring(a+9,b) para recuperar el valor.
aybson los indices obtenidos en los pasos 1 y 2.
Después habrá que ver si el valor es un decimal y hace falta reemplazar puntos por comas o algo por el estilo antes de poder procesarlo según corresponda…
No es la explicación mas clara del mundo, pero creo que se entiende.
Julian.