Json 在 C++ 中序列化 (esp32)

Json serializing in C++ (esp32)

我正在为 esp32 编写一些脚本并努力序列化 json。

使用的库是 HTTPClient 和 ArduinoJson。

String payload = http.getString();
Serial.println(payload);
deserializeJson(result, payload);
const char* usuario = result["user"];
Serial.println("##########");
Serial.println(usuario);

接收到的负载是:

{"ip":"10.57.39.137","area":"[{\"id\":\"3\",\"text\":\"BOX\"}]","user":"[{\"id\":\"6270\",\"text\":\"ANDRE LARA OLIVEIRA E SILVA\"}]","teamId":6,"id":4,"siteId":2,"userCreate":"100059527","dateCreate":"2020-11-19T08:49:03.957","userUpdate":null,"dateUpdate":null}

我需要从“用户”键中检索 ID 和文本。反序列化和检索用户对象很好。但是 result["user"] returns [{"id":"6270","text":"ANDRE LARA OLIVEIRA E SILVA"}] 到 char 数组。所以它有点像嵌套到数组的 json ......而且它无法反序列化。

谁能帮我如何从“用户”对象正确获取“id”和“文本”值?

谢谢!

“谁能帮我如何从“用户”对象正确获取“id”和“文本”值?”您可以通过

访问它们
const char *id = result["user"]["id"];
const char *text = result["user"]["text"];

尝试:

const int id = result["user"]["id"];
const char* text = result["user"]["text"];

库不知道该字符串的内容是否有效JSON,因此您重新解析了它。这段代码在我的电脑上对我有用,尽管我没有 Arduino 来测试它:

auto payload = "..."; // JSON content here
StaticJsonDocument<1024> result;
deserializeJson(result, payload);
auto user = result["user"].as<const char*>();

StaticJsonDocument<256> userObj;
deserializeJson(userObj, user);
auto id = userObj[0]["id"].as<int>();
auto text = userObj[0]["text"].as<const char*>();