Я запрашиваю веб-страницу, которая возвращает строку JSON, используя микроконтроллер NodeMCU ESP8266.Ответ с веб-страницы выглядит следующим образом:
{"1":true,"2":false,"3":false,"4":true,"5":true,"6":false,"7":false,"8":false}
Код, который я использую, выглядит следующим образом:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
String payload = "";
const char* ssid = "ssid";
const char* password = "password";
String url = "example.com/data.json";
void setup() {
Serial.begin(115200);
delay(2000); while (!Serial);
WiFi.begin(ssid, password);
while (WiFi.status() !=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
pinMode(D0, OUTPUT);
}
void loop() {
StaticJsonBuffer<100> jsonBuffer;
delay(5000);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
Serial.println(httpCode);
Serial.println(http.getString());
if (httpCode > 0) {
payload = http.getString();
}
http.end();
JsonObject& root = jsonBuffer.parseObject(payload);
Serial.println(payload);
if(!root.success()) {
Serial.println("parseObject() failed");
}
if(root["1"] == true) {
Serial.println("true");
}
digitalWrite(D0, !digitalRead(D0));
}
Я считаю, что причина, по которой он не анализируется, состоит в том, что переменная полезной нагрузки заканчивается назавершающий символ новой строки.Затем я попытался payload = payload.trim();
, но затем я получил no match for 'operator=' (operand types are 'String' and 'void')
, поэтому я попытался payload = payload.replace("\n,"");
та же проблема, затем я попытался payload = String(payload);
снова, сбой.Что я делаю не так?