Reply To: openweathermap – Daten lesen und parsen der JSON-Daten

Forums The NanoESP & Pretzel Board Forum openweathermap – Daten lesen und parsen der JSON-Daten Reply To: openweathermap – Daten lesen und parsen der JSON-Daten

#2150
Philipp
Participant

Ich habe am readData() und convertData() noch ein wenig geschraubt, aber trotzdem schlägt das parsing fehl :/
Die richtigen Daten kommen schon beim JSON-Datenelement an, aber warum es diese nicht versteht gute Frage.

Ich habe in einem abgespecktem Programm auch ein wenig experimentiert und es kamen tolle Dinge beim parsing rum.
Alleine ein else-Zweig beim if (!root.success()) { Serial.println(“parseObject() failed”); } führte dazu, dass es nicht mehr ging. :/

//----------------- die angeforderten Daten aus dem NanoESP lesen
String readData() {

  String data;
  char endOfHeaders[] = "\r\n\r\n";

  while (!nanoesp.available()) {}; //warten auf NanoESP

  while (nanoesp.available()) {
    if (nanoesp.find(endOfHeaders)) //damit wir nur die JSON-Daten auslesen
    { data = nanoesp.readString();
      //Serial.print(data);
      return data;
    } else {
      debug("COULD NOT READ DATA");
      return "FAILED";
    }
  }
//----------------- die Daten aus dem JSON-Format konvertieren
void convertData(String data) {

  debug("\r\nCONVERTING DATA");
  const char* json = data.c_str();
  Serial.println(json);
  debug("CONVERTED TO JSON");

  const size_t bufferSize = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 400;
  DynamicJsonBuffer jsonBuffer(bufferSize);
  //StaticJsonBuffer<1024> jsonBuffer;

  JsonObject& root = jsonBuffer.parseObject(json);

  String location = root["name"];
  float temperature = root["main"]["temp"];

  if (!root.success()) { Serial.println("parseObject() failed"); }
  Serial.println("In " + location + " sind es aktuell " + temperature + "°C.");

}