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