JsonVariant::to<T>() clears the content of the variant and changes its type to T.


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 a JsonObject pointing to this object.
  • JsonVariant::to<JsonObject>():
    1. creates a new object in the JsonDocument,
    2. makes the JsonVariant point to the new object,
    3. returns a JsonObject pointing to it.

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>().


void fillConfig(JsonVariant variant) {
  JsonObject config =<JsonObject>();
  config["host"] = "";
  config["port"] = 80;

See also