Цикл 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}]

, 👍0

Обсуждение

Как мы можем ответить на этот вопрос, если не знаем, какой JSON будет передан и какая ошибка возникнет?, @Maximilian Gerhardt

разве это не будет root[0]["value"]?, @Jaromanda X

Что это значит? избегайте пропущенных скобок .... как избежать того, чего не существует?, @jsotola

@jsotola Я хотел сказать, пожалуйста, избегайте, если я пропустил какую-то скобку в приведенном выше коде. Неважно..., @Sheraz Ahmed

Для начала вам следует нажать Ctrl-T и сделать правильный отступ в коде..., @dda


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);
}
,

Итак, вы узнали, что у массива JSON есть свойство размера?, @Juraj

Да, и jsonArray, и jsonObject имеют свойство размера., @Sheraz Ahmed