Sono a conoscenza di alcune librerie di analisi JSON per Arduino.
Non ho mai usato nessuno di questi, ma ho fatto una semplice analisi JSON in un progetto a cui sto lavorando, quindi ti mostrerò come ho fatto.
NOTA: sto leggendo i dati seriali utilizzando la libreria seriale del software. Dovrai modificare questo codice in modo che funzioni per te. Funzionerà solo su stringhe JSON molto semplici. È molto limitato, ma se è tutto ciò che stai analizzando, funzionerà.
Esempio di risposta JSON dal server:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Innanzitutto, leggi solo i dati tra parentesi graffe.
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);
}
Questo codice legge i dati un byte alla volta e una volta ottenuto un controvento aperto, inizia a salvarli response
. Quando riceve una parentesi graffa di chiusura, la termina. Quindi ecco una chiara limitazione, puoi avere solo un set di parentesi graffe di apertura / chiusura nella tua stringa.
Una volta che ho la stringa, uso indexOf
e substring
per estrarre le informazioni rilevanti:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Questo codice imposta start
l'inizio di id":"
+ 5 caratteri nella stringa. È +5 perché è così id":"
. Quindi start
punta a TEST1
nella stringa JSON. Nel mio sistema, l'ID sarà sempre lungo 5 caratteri, quindi fine è start + 5
. Poi lo uso substring
per estrarlo.
Ancora una volta, prima che qualcuno inizi a votarmi per questa orribile soluzione: se sai esattamente con cosa stai lavorando e comprendi i limiti di questo codice, allora questa non è una cattiva soluzione. È una soluzione che porta a termine il lavoro.