Цикл foreach Arduino JSON
Я пытаюсь извлечь значения с помощью ArduinoJson. Значения не фиксированы, поэтому мне нужно использовать цикл foreach.
Я пробую это, но не могу использовать значения так, как мог бы.
root["0"]["value"].as<const char*>();
Вот мой код.
void loop(){
int httpCode = http.GET();
if(httpCode > 0) {
// если запрос Get обработан
if(httpCode == HTTP_CODE_OK) {
payload = http.getString();
}
if(payload.length() > 0) {
Serial.println(payload);
JsonObject& root = jsonBuffer.parseObject(payload);
if (!root.success()) {
Serial.println("parseObject() failed");
jsonBuffer.clear();
} else {
Serial.println("Data Fetched");
for(JsonPair& node : root) {
Serial.print("0 State: ");
Serial.println(*node);
}
http.end();
}
} else {
Serial.println("Payload Empty");
}
}
}
Пожалуйста, избегайте пропущенных скобок. Заранее спасибо.
[{"state": true, "value": 10}, {"state": false, "value": 8}, {"state": false, "value": 5}, {"state": false, "value": 13}]
@Sheraz Ahmed, 👍0
Обсуждение1 ответ
▲ 2
Я нашел другой способ обойти решение.
Не знаю, поможет ли это кому-нибудь, но проблема заключалась в том, что у меня было неизвестное количество узлов, которые я хотел пройти, пример формата json выше.
void loop(){
int httpCode = http.GET();
if(httpCode > 0) {
// если запрос Get обработан
if(httpCode == HTTP_CODE_OK) {
payload = http.getString();
}
if(payload.length() > 0){
JsonArray& nodes = jsonBuffer.parseArray(payload);
if (!nodes.success()) {
Serial.println("parseObject() failed");
jsonBuffer.clear();
}else{
int node_length = nodes.size();
for(int i=0; i<node_length;i++){
Serial.printf("node-%i\nValue : ",i );
String value = nodes[i]["value"].as<const char*>();
String state = nodes[i]["state"].as<const char*>();
Serial.println(value);
Serial.print("State : ");
Serial.println(state);
}
http.end();
}
}else{
Serial.println("Payload Empty");
}
}
jsonBuffer.clear();
delay(8000);
}
,
@Sheraz Ahmed
Итак, вы узнали, что у массива JSON есть свойство размера?, @Juraj
Да, и jsonArray, и jsonObject имеют свойство размера., @Sheraz Ahmed
Смотрите также:
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- Как определить размер Flash?
- WebSocketsServer.h: No such file or directory
- В ESP-12E NodeMCU, какой выход PIN A0?
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Было найдено несколько библиотек для «WiFiClient.h» с помощью nodemcu.
- NodeMCU поддерживает внедрение ключей?
Как мы можем ответить на этот вопрос, если не знаем, какой JSON будет передан и какая ошибка возникнет?, @Maximilian Gerhardt
разве это не будет
root[0]["value"]
?, @Jaromanda XЧто это значит?
избегайте пропущенных скобок
.... как избежать того, чего не существует?, @jsotola@jsotola Я хотел сказать, пожалуйста, избегайте, если я пропустил какую-то скобку в приведенном выше коде. Неважно..., @Sheraz Ahmed
Для начала вам следует нажать Ctrl-T и сделать правильный отступ в коде..., @dda