Description

JsonVariant::shallowCopy() includes the specified value without making a copy.
In a way, it’s the opposite of JsonVariant::set(), which makes a deep copy of the value.

JsonVariant::shallowCopy() allows you to embed a JsonDocument inside another without increasing the memory consumption.

This feature was added in ArduinoJson 6.20.0

Signatures

void shallowCopy(JsonVariantConst variant) const;

Arguments

variant: the variant to link to.

Since JsonArray, JsonDocument, JsonObject, and JsonVariant convert to JsonVariantConst, you can pass any of these classes to JsonVariant::shallowCopy().

Example

void sendJsonRpcRequest(const char* method, JsonVariantConst params) {
  StaticJsonDocument<64> doc;
  doc["jsonrpc"] = "2.0";
  doc["id"] = 1;
  doc["method"] = method;
  doc["params"].shallowCopy(params);
  serializeJson(doc, client);
}

See also

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