'operator ='不匹配(操作数类型为'String'和'void')

时间:2018-10-19 21:18:12

标签: c++ arduino arduino-esp8266

我正在查询一个使用NodeMCU ESP8266微控制器返回JSON字符串的网页。该网页的响应如下所示:

{"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);,失败了。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

就像有人说的那样,trimreplace不返回String。它“返回” void,错误消息告诉您您正在尝试将无效返回值分配给String。放置payload.trim();就足够了。 payload.replace("\n","");

也是如此

但是payload.trim();payload.replace("\n","");做的事情不同。如文档中所述,trim()删除尾随空格和前导空格,而replace("\n","")则删除字符串中的所有(唯一)换行符,即使在中间也是如此。

空格通常是指空格,换行符,制表符和其他一些其他字符。