forked from bblanchon/ArduinoJson
Add a "Breaking changes" section to the changelog
This commit is contained in:
80
CHANGELOG.md
80
CHANGELOG.md
@ -29,3 +29,83 @@ HEAD
|
||||
* `serializeJson()` and `serializeMsgPack()` replace the content of `std::string` and `String` instead of appending to it
|
||||
* Replace `add()` with `add<T>()` (`add(T)` is still supported)
|
||||
* Remove `createNestedArray()` and `createNestedObject()` (use `to<JsonArray>()` and `to<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 (with `DynamicJsonDocument`).
|
||||
> In ArduinoJson 7, the memory pool is always allocated in the heap, so `StaticJsonDocument` and `DynamicJsonDocument` have been merged into `JsonDocument`.
|
||||
>
|
||||
> 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 macros `JSON_ARRAY_SIZE()`, `JSON_OBJECT_SIZE()`, and `JSON_STRING_SIZE()` have been removed.
|
||||
>
|
||||
> ```c++
|
||||
> // ArduinoJson 6
|
||||
> StaticJsonDocument<256> doc;
|
||||
> // or
|
||||
> DynamicJsonDocument doc(256);
|
||||
>
|
||||
> // ArduinoJson 7
|
||||
> JsonDocument doc;
|
||||
> ```
|
||||
>
|
||||
> In ArduinoJson 7, `JsonDocument` reuses released memory, so `garbageCollect()` 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`, so `shallowCopy()` 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 of `memoryUsage()` 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 from `ArduinoJson::Allocator` and pass a pointer to an instance of your class to the constructor of `JsonDocument`.
|
||||
>
|
||||
> ```c++
|
||||
> // ArduinoJson 6
|
||||
> class MyAllocator {
|
||||
> // ...
|
||||
> };
|
||||
> BasicJsonDocument<MyAllocator> doc(256);
|
||||
>
|
||||
> // ArduinoJson 7
|
||||
> class MyAllocator : public ArduinoJson::Allocator {
|
||||
> // ...
|
||||
> };
|
||||
> MyAllocator myAllocator;
|
||||
> JsonDocument doc(&myAllocator);
|
||||
> ```
|
||||
>
|
||||
> #### `createNestedArray()` and `createNestedObject()`
|
||||
>
|
||||
> In ArduinoJson 6, you could create a nested array or object with `createNestedArray()` and `createNestedObject()`.
|
||||
> In ArduinoJson 7, you must use `add<T>()` or `to<T>()` instead.
|
||||
>
|
||||
> For example, to create `[[],{}]`, you would write:
|
||||
>
|
||||
> ```c++
|
||||
> // ArduinoJson 6
|
||||
> doc.createNestedArray("array");
|
||||
> doc.createNestedObject("object");
|
||||
>
|
||||
> // ArduinoJson 7
|
||||
> doc.add<JsonArray>();
|
||||
> doc.add<JsonObject>();
|
||||
> ```
|
||||
>
|
||||
> And to create `{"array":[],"object":{}}`, you would write:
|
||||
>
|
||||
> ```c++
|
||||
> // ArduinoJson 6
|
||||
> doc.createNestedArray("array");
|
||||
> doc.createNestedObject("object");
|
||||
>
|
||||
> // ArduinoJson 7
|
||||
> doc["array"].to<JsonArray>();
|
||||
> doc["object"].to<JsonObject>();
|
||||
> ```
|
||||
|
Reference in New Issue
Block a user