5.0 KiB
ArduinoJson: change log
v7.0.3 (2024-02-05)
- Improve error messages when using
char
orchar*
(issue #2043) - Reduce stack consumption (issue #2046)
- Fix compatibility with GCC 4.8 (issue #2045)
v7.0.2 (2024-01-19)
- Fix assertion
poolIndex < count_
afterJsonDocument::clear()
(issue #2034)
v7.0.1 (2024-01-10)
- Fix "no matching function" with
JsonObjectConst::operator[]
(issue #2019) - Remove unused files in the PlatformIO package
- Fix
volatile bool
serialized as1
or0
instead oftrue
orfalse
(issue #2029)
v7.0.0 (2024-01-03)
- 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>();