Antwort auf: openweathermap – Daten lesen und parsen der JSON-Daten
› Foren › Das NanoESP & Pretzel Board Forum › openweathermap – Daten lesen und parsen der JSON-Daten › Antwort auf: openweathermap – Daten lesen und parsen der JSON-Daten
Oktober 27, 2017 um 15:04 Uhr
#2150
Philipp
Teilnehmer
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.");
}