Mir sind einige JSON-Parsing-Bibliotheken für Arduino bekannt.
Ich habe noch nie eines davon verwendet, aber ich habe in einem Projekt, an dem ich arbeite, ein einfaches JSON-Parsen durchgeführt, damit ich Ihnen zeigen kann, wie ich das gemacht habe.
HINWEIS: Ich lese serielle Daten mithilfe der Software-Serienbibliothek. Sie müssen diesen Code ändern, damit er für Sie funktioniert. Dies funktioniert nur mit sehr einfachen JSON-Zeichenfolgen. Es ist sehr begrenzt, aber wenn das alles ist, was Sie analysieren, dann wird es funktionieren.
Beispiel für eine JSON-Antwort vom Server:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Lesen Sie zunächst nur Daten zwischen geschweiften Klammern.
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);
}
Dieser Code liest die Daten byteweise und beginnt, sobald er eine offene Klammer erhält, sie zu speichern response
. Wenn es eine schließende Klammer bekommt, endet es. Hier ist also eine klare Einschränkung: Sie können nur einen Satz öffnender / schließender Klammern in Ihrer Zeichenfolge haben.
Sobald ich den String habe, benutze indexOf
und substring
extrahiere ich relevante Informationen:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Dieser Code setzt start
auf den Anfang von id":"
+ 5 Zeichen in der Zeichenfolge. Es ist +5, weil es so lang id":"
ist. So start
Punkte TEST1
in dem JSON - String. In meinem System wird die ID immer 5 Zeichen lang sein, also ist das Ende start + 5
. Ich benutze dann, um das substring
zu extrahieren.
Nochmals, bevor mich jemand für diese schreckliche Lösung abstimmt: Wenn Sie genau wissen, womit Sie arbeiten und die Einschränkungen dieses Codes verstehen, ist dies keine schlechte Lösung. Es ist eine Lösung, die den Job erledigt.