Search code examples
c++arduinoesp32arduinojson

Json serializing in C++ (ESP32)


I'm writing some script for ESP32 and struggling to serialize a json.

Used libraries are HTTPClient and ArduinoJson.

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

The received payload is:

{"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}

I need to retrieve id and text from "user" key. It's fine to deserialize and retrieve user object. But result["user"] returns: [{"id":"6270","text":"ANDRE LARA OLIVEIRA E SILVA"}] to the char array. So it's something like a json nested in an array... and it's not working out to deserialize.

Can anyone help me how to properly get the "id" and "text" values from "user" object?


Solution

  • The library doesn't know the content of that string is valid JSON, so you have re-parse it. This code worked for me on my PC, though I don't have an Arduino to test it on:

    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*>();