'operator=' 不匹配(操作数类型为 'String' 和 'void')
No match for 'operator=' (operand types are 'String' and 'void')
我正在使用 NodeMCU ESP8266 微控制器查询 returns 一个 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);
,失败。我做错了什么?
就像有人说的,trim
和 replace
不 return String
。它 "returns" void
,错误消息告诉您您正在尝试将 void return 分配给字符串。放payload.trim();
就够了。 payload.replace("\n","");
也是如此
但是 payload.trim();
和 payload.replace("\n","");
不做同样的事情。如文档中所述,trim()
删除尾随和前导的白色 space,而 replace("\n","")
将删除字符串中的所有(且仅)换行符,即使它位于中间。
白色space一般是指space、换行符、制表符和其他一些杂字符。
我正在使用 NodeMCU ESP8266 微控制器查询 returns 一个 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);
,失败。我做错了什么?
就像有人说的,trim
和 replace
不 return String
。它 "returns" void
,错误消息告诉您您正在尝试将 void return 分配给字符串。放payload.trim();
就够了。 payload.replace("\n","");
但是 payload.trim();
和 payload.replace("\n","");
不做同样的事情。如文档中所述,trim()
删除尾随和前导的白色 space,而 replace("\n","")
将删除字符串中的所有(且仅)换行符,即使它位于中间。
白色space一般是指space、换行符、制表符和其他一些杂字符。