如何解决将字符串文字转换为 JSON 数组并使用 HTTP Post 请求发送
我正在尝试使用 Arduino IDE 通过 ESP32 WiFi 模块发送发布请求。尽管收到的响应是 200,但我收到了 JSON 正文对象的格式错误。我应该如何格式化 JSON 对象? 这是我需要发送的原始 JSON 对象的样子:
{
"method":"passthrough","params":{
"deviceId":"9006765C87CD29BC37447E490C4C91F819143376","requestData":"{\"system\":{\"set_relay_state\":{\"state\":1}}}"
}
}
这是我在发布请求中尝试过的:
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type","application/json");
int httpResponseCode = http.POST("{\"deviceId\":\"9006765C87CD29BC37447E490C4C91F819143376\",\"requestData\":\"{\"system\":{\"set_relay_state\":{\"state\":0}}}\"}");
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
Serial.print(http.getString());
http.end();
回复如下:
{"error_code":-10100,"msg":"JSON format error"}HTTP Response code: 200
更新 我原本以为我只需要传递参数,但这是我尝试传递方法和参数的版本。然而,我仍然得到相同的结果。
String json =
"({"
"\"method\":\"passthrough\","
"\"params\":{"
"\"deviceId\":\"9006765C87CD29BC37447E490C4C91F819143376\","
"\"requestData\":\"{\"system\":{\"set_relay_state\":{\"state\":1}}}\""
"}"
"})";
使用这个 json 字符串 - 我试过传递 int httpResponseCode = http.POST(json);
但这也不起作用,我得到了同样的错误。我假设在传递给 htt.Post 之前我需要将此字符串转换为 Json 数组?
解决方法
requestData
的值需要对字符串中的引号进行转义。否则,发送的负载是格式错误的 JSON,值 requestData
过早终止。
这可以通过:
http.POST("{\"method\":\"passthrough\",\"params\":{\"deviceId\":\"9006765C87CD29BC37447E490C4C91F819143376\",\"requestData\":\"{\\\"system\\\":{\\\"set_relay_state\\\":{\\\"state\\\":0}}}\"}}";);
或者使用原始字符串文字:
http.POST(R"({"method":"passthrough","params":{"deviceId":"9006765C87CD29BC37447E490C4C91F819143376","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":0}}}"}})");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。