ArduinoJson 7’s Release Notes
This page contains the release notes (changelog) for all versions of ArduinoJson 7.
Click on a version to see the details.
See the dedicated article: ArduinoJson 7.2: smaller arrays.
Changes
- Store object members with two slots: one for the key and one for the value
- Store 64-bit numbers (
double
andlong long
) in an additional slot - Reduce the slot size (see table below)
- Improve message when user forgets third arg of
serializeJson()
et al. - Set
ARDUINOJSON_USE_DOUBLE
to0
by default on 8-bit architectures - Deprecate
containsKey()
in favor ofdoc["key"].is<T>()
- Add support for escape sequence
\'
(issue #2124)
BREAKING CHANGES
After being on the death row for years, the
containsKey()
method has finally been deprecated. You should replacedoc.containsKey("key")
withdoc["key"].is<T>()
, which not only checks that the key exists but also that the value is of the expected type.// Before if (doc.containsKey("value")) { int value = doc["value"]; // ... } // After if (doc["value"].is<int>()) { int value = doc["value"]; // ... }
Download links
Online examples
See the dedicated article: ArduinoJson 7.1: MessagePack upgrade.
Changes
- Add
ARDUINOJSON_STRING_LENGTH_SIZE
to the namespace name - Add support for MsgPack binary (PR #2078 by @Sanae6)
- Add support for MsgPack extension
- Make string support even more generic (PR #2084 by @d-a-v)
- Optimize
deserializeMsgPack()
- Allow using a
JsonVariant
as a key or index (issue #2080)
Download links
Online examples
See the dedicated article: ArduinoJson 7.
Changes
- Remove
BasicJsonDocument
- Remove
StaticJsonDocument
- Add abstract
Allocator
class - Merge
DynamicJsonDocument
withJsonDocument
- Remove
JSON_ARRAY_SIZE()
,JSON_OBJECT_SIZE()
, andJSON_STRING_SIZE()
- Remove
ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
(string deduplication cannot be disabled anymore) - Remove
JsonDocument::capacity()
- Store the strings in the heap
- Reference-count shared strings
- Always store
serialized("string")
by copy (#1915) - Remove the zero-copy mode of
deserializeJson()
anddeserializeMsgPack()
- Fix double lookup in
to<JsonVariant>()
- Fix double call to
size()
inserializeMsgPack()
- Include
ARDUINOJSON_SLOT_OFFSET_SIZE
in the namespace name - Remove
JsonVariant::shallowCopy()
JsonDocument
’s capacity grows as needed, no need to pass it to the constructor anymoreJsonDocument
’s allocator is not monotonic anymore, removed values get recycled- Show a link to the documentation when user passes an unsupported input type
- Remove
JsonDocument::memoryUsage()
- Remove
JsonDocument::garbageCollect()
- Add
deserializeJson(JsonVariant, ...)
anddeserializeMsgPack(JsonVariant, ...)
(#1226) - Call
shrinkToFit()
indeserializeJson()
anddeserializeMsgPack()
serializeJson()
andserializeMsgPack()
replace the content ofstd::string
andString
instead of appending to it- Replace
add()
withadd<T>()
(add(T)
is still supported) - Remove
createNestedArray()
andcreateNestedObject()
(useto<JsonArray>()
andto<JsonObject>()
instead)
BREAKING CHANGES
As every major release, ArduinoJson 7 introduces several breaking changes. I added some stubs so that most existing programs should compile, but I highty recommend you upgrade your code.
JsonDocument
In ArduinoJson 6, you could allocate the memory pool on the stack (with
StaticJsonDocument
) or in the heap (withDynamicJsonDocument
).
In ArduinoJson 7, the memory pool is always allocated in the heap, soStaticJsonDocument
andDynamicJsonDocument
have been merged intoJsonDocument
.In ArduinoJson 6,
JsonDocument
had a fixed capacity; in ArduinoJson 7, it has an elastic capacity that grows as needed. Therefore, you don’t need to specify the capacity anymore, so the macrosJSON_ARRAY_SIZE()
,JSON_OBJECT_SIZE()
, andJSON_STRING_SIZE()
have been removed.// ArduinoJson 6 StaticJsonDocument<256> doc; // or DynamicJsonDocument doc(256); // ArduinoJson 7 JsonDocument doc;
In ArduinoJson 7,
JsonDocument
reuses released memory, sogarbageCollect()
has been removed.
shrinkToFit()
is still available and releases the over-allocated memory.Due to a change in the implementation, it’s not possible to store a pointer to a variant from another
JsonDocument
, soshallowCopy()
has been removed.In ArduinoJson 6, the meaning of
memoryUsage()
was clear: it returned the number of bytes used in the memory pool.
In ArduinoJson 7, the meaning ofmemoryUsage()
would be ambiguous, so it has been removed.Custom allocators
In ArduinoJson 6, you could specify a custom allocator class as a template parameter of
BasicJsonDocument
.
In ArduinoJson 7, you must inherit fromArduinoJson::Allocator
and pass a pointer to an instance of your class to the constructor ofJsonDocument
.// ArduinoJson 6 class MyAllocator { // ... }; BasicJsonDocument<MyAllocator> doc(256); // ArduinoJson 7 class MyAllocator : public ArduinoJson::Allocator { // ... }; MyAllocator myAllocator; JsonDocument doc(&myAllocator);
createNestedArray()
andcreateNestedObject()
In ArduinoJson 6, you could create a nested array or object with
createNestedArray()
andcreateNestedObject()
.
In ArduinoJson 7, you must useadd<T>()
orto<T>()
instead.For example, to create
[[],{}]
, you would write:// ArduinoJson 6 arr.createNestedArray(); arr.createNestedObject(); // ArduinoJson 7 arr.add<JsonArray>(); arr.add<JsonObject>();
And to create
{"array":[],"object":{}}
, you would write:// ArduinoJson 6 obj.createNestedArray("array"); obj.createNestedObject("object"); // ArduinoJson 7 obj["array"].to<JsonArray>(); obj["object"].to<JsonObject>();