Мені відомо кілька бібліотек JSON для розбору Arduino.
Я ніколи не використовував нічого з цього, але я робив простий розбір JSON в проекті, над яким я працюю, тож я покажу вам, як я це зробив.
ПРИМІТКА. Я читаю послідовні дані, використовуючи послідовну бібліотеку програмного забезпечення. Вам потрібно буде змінити цей код, щоб він працював для вас. Це буде працювати лише на дуже простих струнах JSON. Це дуже обмежено, але якщо це все, що ти розбираєш, то це спрацює.
Приклад відповіді JSON від сервера:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
По-перше, читайте лише дані між фігурними дужками.
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);
}
Цей код зчитує дані по одному байту за часом, і як тільки він отримує відкриту дужку, він починає зберігати їх у response
. Коли він отримує фіксатор, він закінчує його. Отже, ось чітке обмеження, у вашому рядку може бути лише один набір дужок відкриття / закриття.
Щойно у мене є рядок, я використовую indexOf
та substring
витягую відповідну інформацію:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Цей код встановлює start
початок id":"
+ 5 символів у рядку. Це +5, оскільки так триває id":"
. Так start
вказує на TEST1
рядок JSON. У моїй системі ідентифікатор завжди матиме 5 символів, тому кінець start + 5
. Потім я використовую substring
для вилучення цього.
Знову ж таки, перш ніж хтось почне голосувати за це жахливе рішення: якщо ви точно знаєте, з чим працюєте, і розумієте обмеження цього коду, то це не є поганим рішенням. Це рішення, яке виконує роботу.