JsonVariant::to<T>()
Description
JsonVariant::to<T>()
clears the content of the variant and changes its type to T
.
It has no effect if the JsonVariant
is unbound.
Signatures
JsonArray to<JsonArray>() const;
JsonObject to<JsonObject>() const;
Return value
A reference to the new value of the variant.
as<T>()
vs to<T>()
JsonVariant::as<T>()
and JsonVariant::to<T>()
look similar but are very different: the former reads the value, whereas the latter changes the reference.
Suppose the JsonVariant
refers to an object:
JsonVariant::as<JsonObject>()
returns aJsonObject
pointing to this object.JsonVariant::to<JsonObject>()
:- creates a new object in the
JsonDocument
, - makes the
JsonVariant
point to the new object, - returns a
JsonObject
pointing to it.
- creates a new object in the
JsonVariant::to<T>()
allows creating an empty object or an empty array, and it’s probably its only legitimate use. Calling JsonVariant::to<T>()
with a T
other than JsonArray
or JsonObject
works but has no practical use.
JsonVariant::as<T>()
, on the other hand, allows solving situations where implicit casts don’t work; for example, when you call a function with several matching overloads (like Serial::print()
) or when you use type deduction with the auto
keyword (see example below).
Remark that JsonVariantConst
, which is a read-only version of JsonVariant
, supports as<T>()
but not to<T>()
.
Example
void fillConfig(JsonVariant variant) {
JsonObject config = variant.to<JsonObject>();
config["host"] = "127.0.0.1";
config["port"] = 80;
}