Conozco algunas bibliotecas de análisis JSON para Arduino.
Nunca he usado ninguno de estos, pero hice un análisis JSON simple en un proyecto en el que estoy trabajando, así que te mostraré cómo lo hice.
NOTA: Estoy leyendo datos en serie usando la biblioteca en serie del software. Tendrá que cambiar este código para que funcione para usted. Esto solo funcionará en cadenas JSON muy simples. Es muy limitado, pero si eso es todo lo que está analizando, funcionará.
Ejemplo de respuesta JSON del servidor:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Primero, solo lea los datos entre llaves.
String response = "";
bool begin = false;
while (SIM900.available() || !begin) {
char in = SIM900.read();
if (in == '{') {
begin = true;
}
if (begin) response += (in);
if (in == '}') {
break;
}
delay(1);
}
Este código lee los datos un byte a la vez y una vez que obtiene una llave abierta, comienza a guardarlos response
. Cuando obtiene una llave de cierre, la termina. Así que aquí hay una clara limitación, solo puede tener un conjunto de llaves de apertura / cierre en su cadena.
Una vez que tengo la cadena, uso indexOf
y substring
para extraer información relevante:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Este código se establece start
al comienzo de id":"
+ 5 caracteres en la cadena. Es +5 porque así de largo id":"
es. Entonces start
apunta a TEST1
la cadena JSON. En mi sistema, la identificación siempre tendrá 5 caracteres, así que el final es start + 5
. Luego uso substring
para extraer eso.
Nuevamente, antes de que alguien empiece a votar por esta horrible solución: si sabe exactamente con qué está trabajando y comprende las limitaciones de este código, entonces esta no es una mala solución. Es una solución que hace el trabajo.