将字符串文字转换为 JSON 数组并使用 HTTP Post 请求发送
Converting string literal to JSON Array and sending using HTTP Post Request
我正在尝试使用 Arduino IDE 通过 ESP32 WiFi 模块发送 post 请求。虽然收到的响应是 200,但我收到 JSON 正文对象的格式错误。我应该如何格式化 JSON 对象?
这是我需要发送的原始 JSON 对象的样子:
{
"method":"passthrough",
"params":{
"deviceId":"9006765C87CD29BC37447E490C4C91F819143376",
"requestData":"{\"system\":{\"set_relay_state\":{\"state\":1}}}"
}
}
这是我在 Post 请求中尝试过的:
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}}}"}})");
我正在尝试使用 Arduino IDE 通过 ESP32 WiFi 模块发送 post 请求。虽然收到的响应是 200,但我收到 JSON 正文对象的格式错误。我应该如何格式化 JSON 对象? 这是我需要发送的原始 JSON 对象的样子:
{
"method":"passthrough",
"params":{
"deviceId":"9006765C87CD29BC37447E490C4C91F819143376",
"requestData":"{\"system\":{\"set_relay_state\":{\"state\":1}}}"
}
}
这是我在 Post 请求中尝试过的:
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?
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}}}"}})");