Znam kilka bibliotek parsujących JSON dla Arduino.
Nigdy nie użyłem żadnego z nich, ale wykonałem kilka prostych analiz JSON w projekcie, nad którym pracuję, więc pokażę ci, jak to zrobiłem.
UWAGA: Czytam dane szeregowe za pomocą biblioteki oprogramowania szeregowego. Musisz zmienić ten kod, aby działał dla Ciebie. Działa to tylko na bardzo prostych ciągach JSON. Jest bardzo ograniczony, ale jeśli to wszystko, co analizujesz, to zadziała.
Przykład odpowiedzi JSON z serwera:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Po pierwsze, czytaj tylko dane między nawiasami klamrowymi.
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);
}
Ten kod odczytuje dane jeden bajt na raz, a kiedy otrzyma otwarty nawias klamrowy, zaczyna zapisywać go response
. Kiedy dostaje nawias zamykający, kończy go. Oto wyraźne ograniczenie, możesz mieć tylko jeden zestaw nawiasów otwierających / zamykających w swoim ciągu.
Po otrzymaniu ciągu używam indexOf
i substring
wyodrębniam odpowiednie informacje:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Ten kod ustawia start
początek id":"
+ 5 znaków w ciągu. To +5, bo tyle id":"
trwa. start
Wskazuje więc TEST1
na ciąg JSON. W moim systemie identyfikator ma zawsze 5 znaków, więc koniec start + 5
. Następnie używam substring
do wyodrębnienia tego.
Ponownie, zanim ktokolwiek zacznie głosować za tym okropnym rozwiązaniem: jeśli dokładnie wiesz, nad czym pracujesz i rozumiesz ograniczenia tego kodu, nie jest to złe rozwiązanie. To rozwiązanie pozwala wykonać zadanie.