error: ElementProxy or MemberProxy is private within this context
In in old versions of ArduinoJson, MemberProxy (the class returned by operator[]) could lead to dangling pointers when used with a temporary string.
To prevent this issue, MemberProxy and ElementProxy are now non-copyable, starting from ArduinoJson 7.3.
Your code is likely to be affected if you use auto to store the result of operator[]. For example, the following line won’t compile anymore:
auto value = doc["key"];
To fix the issue, you must append either .as<T>() or .to<T>(), depending on the situation.
For example, if you are extracting values from a JSON document, you should update like this:
- auto config = doc["config"];
+ auto config = doc["config"].as<JsonObject>();
const char* name = config["name"];
However, if you are building a JSON document, you should update like this:
- auto config = doc["config"];
+ auto config = doc["config"].to<JsonObject>();
config["name"] = "ArduinoJson";
Notice that in the first case, we use as<JsonObject>() because we want to read the value as an object, whereas in the second case, we use to<JsonObject>() because we want to convert the value to an object.