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 indexOfund substringextrahiere ich relevante Informationen:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Dieser Code setzt startauf den Anfang von id":"+ 5 Zeichen in der Zeichenfolge. Es ist +5, weil es so lang id":"ist. So startPunkte TEST1in 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 substringzu 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.