Description

JsonDocument::operator[] gets, replaces, or adds a value in the JsonDocument.

Depending on the argument type the JsonDocument can be used like a JsonArray or a JsonObject.

If you use this operator to set a value in an empty JsonDocument, it automatically converts JsonDocument to the appropriate type. This feature allows creating object without calling JsonDocument::to<JsonObject>(). Here is an example:

JsonDocument doc;
doc["wifi"]["SSID"] = "TheBatCave";

The two lines above create the following document:

{
    "wifi": {
        "SSID": "TheBatCave"
    }
}

All values are stored by copy, except string literals which are stored by address.

The string copy policy has changed in ArduinoJson 7.3.

If you need to know if the insertion succeed, use JsonVariant::set() instead.

Signatures

// Shared with JsonArray
ElementProxy operator[](size_t index);

// Shared with JsonArrayConst
JsonVariantConst operator[](size_t index) const;

// Shared with JsonObject
MemberProxy operator[](const char (&key)[N]);
MemberProxy operator[](const char* key);
MemberProxy operator[](const String& key);
MemberProxy operator[](const std::string& key);
MemberProxy operator[](const __FlashStringHelper* key);
MemberProxy operator[](std::string_view key);

// Shared with JsonObjectConst
JsonVariantConst operator[](const char* key) const;
JsonVariantConst operator[](const String& key) const;
JsonVariantConst operator[](const std::string& key) const;
JsonVariantConst operator[](const __FlashStringHelper* key) const;
JsonVariantConst operator[](std::string_view key) const;

Arguments

index: the index in the JsonArray.

key: the key in the JsonObject

Return value

A proxy class that allows using the JsonDocument as an array or a dictionary. If this concept of proxy class is unfamiliar to you, just think of a JsonVariant instead.

Please see JsonArray::operator[] and JsonObject::operator[] for explanations about ElementProxy and MemberProxy.

Example

JsonDocument doc;

deserializeJson(doc, "{\"hello\":\"world\"}");
const char* hello = variant["hello"];

deserializeJson(doc, "[\"hello\",\"world\"]");
const char* world = variant[1];

See also

Global warming stripes by Professor Ed Hawkins (University of Reading)