Добрый день! Сервер Blynk на запрос http://blynk-cloud.com/auth_token/get/pin выдает ответ в таком виде Если я правильно понимаю, то этот ответ в формате json? Но при попытке распарсить его с помощью библиотеки ArduinoJson.h ничего не получается. Или это какой то "неправильныей" пчелыjson? И проще обработать его как обычную строку?
Код на основе примера из библиотеки Спойлер Код (C++): #include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson #include <ESP8266WiFi.h> const char* ssid = "ssid"; // тут SSID и пароль к WIFI const char* password = "pass"; const char* host = "blynk-cloud.com"; // тут адрес сервера void getWeatherData() //client function to send/receive GET request data. { String result = ""; WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } // We now create a URI for the request String url = "/auth_token/get/V1"; // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { client.stop(); return; } } // Read all the lines of the reply from server while (client.available()) { result = client.readStringUntil('\r'); } Serial.print("result ");Serial.println(result); result.replace('[', ' '); result.replace(']', ' '); char jsonArray [result.length() + 1]; result.toCharArray(jsonArray, sizeof(jsonArray)); jsonArray[result.length() + 1] = '\0'; Serial.print("jsonArray "); Serial.println(jsonArray); StaticJsonDocument<128> doc; DeserializationError error = deserializeJson(doc, jsonArray); if (error) { Serial.print("deserializeJson() failed: "); Serial.println(error.c_str()); return; } // Extract values // ????????????????????????????????????????????????????????? Serial.println(doc[""].as<char*>()); Serial.println(doc[""].as<long>()); Serial.println(doc["0"][0].as<float>(), 6); //?????????????????????????????????????????????????????????????? } void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); getWeatherData(); } void loop() { } В сериал получаю Спойлер: Serial result ["-3.500","986912"] jsonArray "-3.500","986912" 0 0.000000 Вся загвоздка в секции // Extract values. В примере парсится json другого формата Спойлер: json из примера It performs a GET resquest on arduinojson.org/example.json // Here is the expected response: { "sensor": "gps", "time": 1351824120, "data": [ 48.756080, 2.302038 ] } // Extract values Serial.println(F("Response:")); Serial.println(doc["sensor"].as<char*>()); Serial.println(doc["time"].as<long>()); Serial.println(doc["data"][0].as<float>(), 6); Serial.println(doc["data"][1].as<float>(), 6); А вот как мне указать правильно поля и т.д. не могу понять
интересно. нафига вы квадратные скобки из массива удаляете? и добавлю, если ["-3.500","986912"] - это все что приходит в ответ. то это не ясон никакой. а какие-то обрывки. почему быв вам не распарсить его самостоятельно. без библиотеки
Так ясен пень, что это такое? Код (C++): Serial.println(doc[""].as<char*>()); Serial.println(doc[""].as<long>()); Serial.println(doc["0"][0].as<float>(), 6); Читайте просто по номеру в массиве Код (C++): #include <ArduinoJson.h> void setup() { Serial.begin(9600); StaticJsonDocument<128> doc; char jsonArray[] = "[\"-3.500\",\"986912\"]"; Serial.print("jsonArray "); Serial.println(jsonArray); DeserializationError error = deserializeJson(doc, jsonArray); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.c_str()); return; } float one = doc[0]; long two = doc[1]; Serial.println(one); Serial.println(two); } void loop() {}