JsonVariant::set() replaces the value stored in the variant. The variant may change its type if necessary.

Instead of this function, use JsonArray::operator[] or JsonObject::operator[] because they offer a more intuitive syntax


bool set(bool value) const;

bool set(float value) const;
bool set(double value) const;

bool set(signed char value) const;
bool set(signed long value) const;
bool set(signed int value) const;
bool set(signed short value) const;
bool set(unsigned char value) const;
bool set(unsigned long value) const;
bool set(unsigned int value) const;
bool set(unsigned short value) const;

bool set(char *value) const;                       // stores by copy
bool set(const char *value) const;                 // stores by pointer
bool set(const __FlashStringHelper *value) const;  // stores by copy

bool set(const String &value) const;       // stores by copy
bool set(const std::string &value) const;  // stores by copy
bool set(const Printable& value)           // 🆕 (added in 6.18.0)
bool set(std::string_view value)           // 🆕 (added in 6.18.1)

bool set(JsonArray array) const;          // stores by copy
bool set(JsonObject object) const;        // stores by copy
bool set(JsonVariant variant) const;      // stores by copy
bool set(const JsonDocument& doc) const;  // stores by copy

bool set(TEnum value) const;  // 🆕 alias of set(int) (added in 6.15.2)
bool set(T value) const;      // 🆕 calls user-defined function (added in 6.18.0)


value: the new value of the variant, it can be any type supported by ArduinoJson or a user-defined type if you define custom converters.

If you pass a JsonArray, a JsonObject, or a JsonVariant, JsonVariant::set() makes a complete clone of the argument. In other words, the value is stored by copy, not by reference.

As usual, ArduinoJson makes a copy of a string in the JsonDocument, except if it’s a const char*.

Return value

JsonVariant::set() returns a bool that tells whether the operation was successful or not:

  • true if the value operation was successful.
  • false if there was not enough room in the JsonDocument.

String duplication

ArduinoJson makes a copy of the string when you call this function with one of the following types:

This duplication consumes some space in the JsonDocument; don’t forget to increase its capacity accordingly.

User-defined types 🆕

JsonVariant::set() supports user-defined types by calling convertToJson(). For example, to support tm, you must define:

bool convertToJson(const tm& src, JsonVariant dst) {
  char buf[32];
  strftime(buf, sizeof(buf), "%FT%TZ", &src);
  return dst.set(buf);

This feature was added in ArduinoJson 6.18.0, see article for details.


DynamicJsonDocument doc(2048);
bool success = doc["hello"].set("world");
serializeJson(doc, Serial);

The above program produces the following output:


See also