Мне известно о нескольких библиотеках 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
чтобы извлечь это.
Опять же, прежде чем кто-то начнет голосовать за меня за это ужасное решение: если вы точно знаете, с чем работаете, и понимаете ограничения этого кода, то это не плохое решение. Это решение, которое выполняет свою работу.