Compare commits

...

717 Commits

Author SHA1 Message Date
8cbb0975a1 Less shitty float to double conversion to avoid compiler warning 2023-10-10 15:03:49 +02:00
c65e8b2201 Fix compilation in pure esp-idf project without arduino 2023-06-21 15:19:46 +02:00
ecbc8e85d4 Wandbox: upgrade to GCC 5.5.0 2023-06-19 09:03:28 +02:00
4d00ed9efc Fix build on ESP32 (caused by espressif/arduino-esp32#7941)
Ported from 6b4dd3ff2f
2023-05-06 10:42:17 +02:00
cd5566cd40 Add a test for #1922 2023-05-06 10:32:33 +02:00
52d8a65cbc Fix compatibility with the Blynk libary (fixes #1914) 2023-04-18 15:13:41 +02:00
420221f078 Set version to 6.21.2 2023-04-12 14:35:25 +02:00
082ae69e86 Set default for ARDUINOJSON_ENABLE_PROGMEM to 1 on AVR 2023-04-12 11:42:02 +02:00
976a6d7594 CI: check build configuration on AVR 2023-04-12 11:22:50 +02:00
40daf56b5a Allow using PROGMEM outside of Arduino (fixes #1903) 2023-04-07 18:19:33 +02:00
31ce648e63 Change naming convention from _member to member_ (fixes #1905) 2023-04-07 09:02:23 +02:00
4ba9c1b0c0 Add Dev Container configs 2023-03-27 18:59:21 +02:00
19c5bb7f15 Pass -v to particle command line 2023-03-27 14:22:15 +02:00
cb850bc1b1 Set version to 6.21.1 2023-03-27 14:05:53 +02:00
481e4d2ffb Add timeouts for particle commands 2023-03-27 14:05:10 +02:00
9e9015f4b9 Fix compatibility with GCC 5.2 (fixes #1897) 2023-03-27 11:00:20 +02:00
74601b2585 CI: restore build on GCC 5 2023-03-27 08:48:44 +02:00
9bb3f4051d Double speed of DynamicJsonDocument::garbageCollect() 2023-03-20 12:32:52 +01:00
5edd435fe9 Add a constructor to VariantData 2023-03-20 10:14:54 +01:00
de9239caab Set version to 6.21.0 2023-03-14 21:05:56 +01:00
c89a2025ce Make string support generic (issue #1807) 2023-03-13 12:19:05 +01:00
42ae8c3037 Remove negativeBinaryPowersOfTenPlusOne 2023-02-22 15:42:10 +01:00
319ececf26 Keep only one implementation of make_float() 2023-02-22 15:42:10 +01:00
886254c41e Reduce size of make_float() 2023-02-22 15:42:10 +01:00
4e7099dc73 Add pgm_ptr<T> 2023-02-22 15:42:10 +01:00
26948cb83a Use 64-bits literals to forge 64-bits literals 2023-02-22 11:40:15 +01:00
0f8698e655 Replace ARDUINOJSON_EXPANDX with variadic macros (#1820) 2023-02-22 11:24:51 +01:00
b2b995edb3 Use delete instead of hiding copy constructors and assignments (#1820) 2023-02-17 10:59:57 +01:00
33a4773fbd Set clang-format standard to C++11 (#1820) 2023-02-16 11:51:02 +01:00
daa87e12dc Update copyright notice 2023-02-16 11:45:01 +01:00
5abf512276 Reduce number of overloads of deserializeJson() and deserializeMsgPack() (#1820) 2023-02-16 11:17:15 +01:00
0dd4a68913 Use only letters to encode configuration in the namespace 2023-02-14 10:04:49 +01:00
8971127b66 Fix build on GCC 6 2023-02-14 10:04:49 +01:00
1b66a217bf Replace ARDUINOJSON_NAMESPACE with an inline namespace (#1820) 2023-02-14 10:04:48 +01:00
34dd46110b Remove safe bool idiom (#1820) 2023-02-13 11:12:41 +01:00
8f7211a50f Remove ARDUINOJSON_HAS_NULLPTR (#1820) 2023-02-10 17:02:52 +01:00
2be4ee732a Remove ARDUINOJSON_HAS_RVALUE_REFERENCES (#1820) 2023-02-10 17:02:52 +01:00
3bdedc9a2f Remove ARDUINOJSON_HAS_LONG_LONG (#1820) 2023-02-10 17:02:52 +01:00
f699954f4d Remove support for __int64 (#1820) 2023-02-10 17:02:52 +01:00
407fc2cd45 Drop support for C++98/C++03 (closes #1820) 2023-02-10 17:02:52 +01:00
91fe6dcae8 Fix clang-tidy warning "Called C++ object pointer is null" 2023-02-10 17:02:51 +01:00
62dea9d364 Reformat CMake files 2023-02-10 17:02:51 +01:00
e0bdc4bff1 Remove unused variables (fixes #1858) 2023-02-10 17:02:51 +01:00
007b4f3362 Update Catch library to 2.13.10 (#1820) 2023-02-10 17:02:51 +01:00
94b2b3f9ce Run all tests with C++11 enabled (#1820) 2023-02-10 17:02:51 +01:00
c2de812cbd Set minimum Clang version to 3.8 (#1820) 2023-02-10 17:02:51 +01:00
669ee4dfe3 Set minimum GCC version to 6 (#1820) 2023-02-10 17:02:33 +01:00
e054cba610 Set minimum Visual Studio version to 2017 (#1820) 2023-02-10 14:49:24 +01:00
3d8287265c Remove unused NOEXCEPT macro 2023-02-09 19:06:36 +01:00
de7afc2015 Minor improvements in the release workflow 2023-02-08 16:51:47 +01:00
ae0499fd57 Update idf_component.yml 2023-02-08 16:46:15 +01:00
b33966c755 Set version to 6.20.1 2023-02-08 16:42:04 +01:00
d2cd13bf2e CI: automatically publish Particle library 2023-02-08 16:40:06 +01:00
06b2263329 README: reduce the size of the logo 2023-02-08 16:40:06 +01:00
d4bb839ce9 CI: remove the draft flag on the GitHub Release 2023-02-08 16:40:04 +01:00
6013a1a56f Fix the name of the license file 2023-02-08 16:40:01 +01:00
34b38e07c7 Deduce template argument of pgm_read() 2023-01-26 18:10:41 +01:00
1ec16ca94f Use pgm_read() instead of ARDUINOJSON_READ_STATIC_ARRAY 2023-01-26 14:55:46 +01:00
b350a96643 Remove explicit exclusion of as<char*>() and as<char>() (#1860)
If you try to call them, you'll now get the same error message as any unsupported type.
You could also add a custom converter for `char*` and `char`.
2023-01-18 22:10:37 +01:00
bf93779b4f Update catch.hpp (fixes #1856)
See also catchorg/Catch2#2627
2023-01-17 13:53:47 +01:00
dd0f7019ef CI: Update runner to get GCC 11.3 (resolves #1859) 2023-01-17 13:53:47 +01:00
175e5b3062 Add missing semicolon (fixes #1857) 2023-01-17 08:59:45 +01:00
7885155634 Add to IDF Component Registry (closes #1844) 2023-01-14 09:26:12 +01:00
1909ffe0f9 Remove link to Discord server 2023-01-13 08:52:33 +01:00
3345255f16 Fix comma tests. 2023-01-13 08:21:54 +01:00
c49adfd6da Test custom converter for std::array (issue #1840) 2022-12-31 10:48:20 +01:00
5094b84a46 Set version to 6.20.0 2022-12-26 17:35:54 +01:00
191fc5dff4 Remove support for naked char (was deprecated since 6.18.0) 2022-12-26 11:02:34 +01:00
cb9c90f2d0 Mark adapter's storagePolicy() as const 2022-12-26 10:23:48 +01:00
09f9bd6b8b Fix detection of char types 2022-12-26 10:21:57 +01:00
67abbef818 Fix GitHub Actions badge (badges/shields#8671) 2022-12-26 10:09:06 +01:00
7ed2559e9e Test custom converter for std::vector<T> (issue #1840) 2022-12-26 10:09:06 +01:00
ac8e5f01db Clang-Format: set AllowShortLoopsOnASingleLine to false 2022-12-24 15:48:00 +01:00
396d2a7b3b CI: check URLs 2022-12-21 19:20:51 +01:00
de725e0a4e Add documentation to most public symbols 2022-12-21 19:20:51 +01:00
2a32803e9e CI: Replace set-output with environment file
https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
2022-12-19 14:58:15 +01:00
d602232b9f Update change log 2022-12-19 14:41:53 +01:00
b0730f04f7 Rename VariantRef to JsonVariant 2022-12-19 14:41:53 +01:00
ef8ed28aec Rename VariantConstRef to JsonVariantConst 2022-12-19 14:41:43 +01:00
b8eff868e6 Rename String to JsonString 2022-12-19 14:41:43 +01:00
d0b619ea93 Rename UInt to JsonUInt 2022-12-19 14:41:43 +01:00
652d70fe2c Rename Integer to JsonInteger 2022-12-19 14:41:43 +01:00
8228aec74b Rename Float to JsonFloat 2022-12-19 14:41:43 +01:00
2f2e0e9415 Rename ObjectIterator to JsonObjectIterator 2022-12-19 12:21:11 +01:00
3a9803679f Rename Pair to JsonPair 2022-12-19 12:21:11 +01:00
dc42d93b0f Rename ObjectConstRef to JsonObjectConst 2022-12-19 12:20:37 +01:00
dff07ebfe8 Rename ObjectRef to JsonObject 2022-12-19 12:20:13 +01:00
4c456a95a3 Rename ArrayIterator to JsonArrayIterator 2022-12-19 12:12:28 +01:00
83e5d9d150 Rename ArrayConstRef to JsonArrayConst 2022-12-19 12:12:28 +01:00
7079aa99d7 Rename ArrayRef to JsonArray 2022-12-19 12:10:58 +01:00
208a22e324 Update GitHub action dessant/lock-threads 2022-12-13 08:28:20 +01:00
9afae963e8 Update tutorial links to point to version 6 2022-12-05 21:00:46 +01:00
1828dec658 CI: add CTest output to the job summary 2022-12-05 21:00:24 +01:00
afe2434baf Extract ObjectConstRef.hpp from ObjectRef.hpp 2022-12-05 21:00:24 +01:00
e08f8d5b51 Inline class ObjectRefBase 2022-12-05 21:00:24 +01:00
7e3b40f379 Extract ArrayConstRef.hpp from ArrayRef.hpp 2022-12-05 21:00:24 +01:00
584770dc6f Inline class ArrayRefBase 2022-12-05 21:00:24 +01:00
5d2a440c69 Remove ArrayFunctions.hpp and ObjectFunctions.hpp 2022-12-05 21:00:24 +01:00
ac14f29e6c Move definitions of JSON_ARRAY_SIZE() and JSON_OBJECT_SIZE() 2022-12-05 21:00:24 +01:00
3d62fa8af2 CI: use ubuntu-20.04 for GCC 2022-12-05 21:00:24 +01:00
0f85a55cac Implement VariantRefBase with a CRTP 2022-12-05 21:00:24 +01:00
21db92af47 Simpify variant reader 2022-11-26 18:32:33 +01:00
6447520b5b Replace Yes/No with int/char 2022-11-22 18:56:42 +01:00
079ccadbee Remove sponsor techexplorations 2022-11-08 08:59:18 +01:00
615f675840 Update dessant/lock-threads 2022-11-03 10:11:45 +01:00
2182c83b87 Remove ArrayShortcuts and ObjectShortcuts 2022-11-02 09:18:02 +01:00
b8d1dccb21 Test IsString<String> and IsString<StringSumHelper> 2022-10-31 18:02:07 +01:00
c3d5e9382d Implement IsString from StringAdapter 2022-10-26 17:20:33 +02:00
ecb72f9a9d Add StringAdapter<T> 2022-10-26 16:19:14 +02:00
7004c39af6 variantGetOrAddMember() takes an adapted string like all its siblings 2022-10-26 10:44:21 +02:00
057956225c Add namespace StringStoragePolicy 2022-10-26 10:41:42 +02:00
b27990f780 Attach copy policy to string adapters 2022-10-26 10:37:18 +02:00
61c6f8ba59 CI : update macOS runner 2022-10-21 17:40:52 +02:00
d8d37ba7ad CI: update deprecated actions 2022-10-21 17:37:15 +02:00
92d6bae25c Remove ArrayIterator::internal() and ObjectIterator::internal() 2022-10-14 18:11:55 +02:00
6e17c3e6f9 Extract VariantRefBase from VariantProxy 2022-10-03 19:14:05 +02:00
8ee67b0229 Fix brew: command not found (actions/runner-images#6283) 2022-10-03 09:54:48 +02:00
07b9153ae4 CI: Add CodeQL 2022-09-22 10:05:55 +02:00
abfcac4674 README: bigger logo on mobile 2022-09-20 17:01:47 +02:00
cde8cd50f8 VSCode: configure include path 2022-09-20 16:55:43 +02:00
cf4436e581 Extract VariantProxy from ElementProxy and MemberProxy 2022-08-30 10:25:03 +02:00
2b6bb78a09 Don't call operator VariantConstRef in VariantComparer 2022-08-30 10:25:03 +02:00
ffa7f8d22d Make MemberProxy and `ElementProxy similar 2022-08-30 10:25:03 +02:00
f73be9cf0f Fix typo.
DeserializationOpion --> DeserializationOption
2022-08-10 09:06:45 +02:00
8002722f3b Clang-format: set DerivePointerAlignment to false 2022-08-09 16:52:17 +02:00
62e83133cd Remove JsonDocument::data() and JsonDocument::memoryPool() 2022-08-09 10:38:36 +02:00
1d21027e2a Fix lax parsing of true, false, and null (fixes #1781) 2022-08-06 09:15:07 +02:00
5705247e5f Fix replacement for getOrAddElement() and getOrAddMember() 2022-08-04 10:47:02 +02:00
dde9e9fc26 Remove member MsgPackDeserializer::_error
This reduces the code size by 54 bytes on AVR.
2022-07-29 11:51:46 +02:00
a6da4ad452 Remove member JsonDeserializer::_error
This reduces the code size by 72 bytes on AVR.
2022-07-29 11:51:46 +02:00
e2a29eef24 CI: simplify Ubuntu package sources 2022-07-29 11:31:09 +02:00
043ee651a9 CI: remove dependency on Ubuntu 21.04 "The Hirsute Hippo" 2022-07-29 11:30:47 +02:00
84b7037b3e Add VariantAttorney 2022-07-07 14:32:43 +02:00
c5838a876b Remove getElement(), getOrAddElement(), getMember(), and getOrAddMember() 2022-07-07 14:32:43 +02:00
750cd0be92 Add collectionToVariant() 2022-07-07 14:32:43 +02:00
758580bfb6 Rename addElement() to add() 2022-07-07 14:32:43 +02:00
04872b6db8 Simplify ProgmemExample.ino and StringExample.ino 2022-07-07 14:32:41 +02:00
58c7c919f2 Remove unused arrayAccept() and objectAccept() 2022-07-07 09:44:58 +02:00
cd8373ad32 Change link() to shallowCopy() (issue #1343)
Instead of storing a pointer, the function copies the `VariantData`.

Benefits:
* smaller code
* no impact on programs that don't use this feature

Drawbacks:
* changes to the original variant are not always reflected on the copy
* modifying the original from the shallow copy leads to UB
2022-07-05 17:07:43 +02:00
3b3ab8c4e1 Inline variantAsArray() and variantAsObject() 2022-07-05 14:02:41 +02:00
5b06b1564e Remove undocumented accept() functions 2022-07-03 17:38:03 +02:00
77b4270d97 Remove Visitable 2022-07-03 15:37:08 +02:00
7c2ca773ff README: update Tech Explorations's link 2022-06-10 12:12:26 +02:00
e2bb2cec7b Fix comparison operators for JsonObject and JsonObjectConst 2022-06-10 11:14:59 +02:00
ff4e837df5 Fix comparison operators for JsonArray and JsonArrayConst 2022-06-09 21:06:32 +02:00
fb904033d3 Replace serializeJson()'s template parameter with JsonVariantConst 2022-06-02 20:36:32 +02:00
e6cd16aec4 Add missing const specifiers in serializers 2022-05-23 19:20:15 +02:00
ee74c3bb1c Inline variantAccept() 2022-05-23 19:17:18 +02:00
37faa7ce13 Merge definitions of VariantConstRef::accept() and VariantRef::accept() 2022-05-23 19:11:09 +02:00
3d6c328a4f Add JsonVariant::link() (resolves #1343) 2022-04-27 15:08:13 +02:00
5577d18377 JsonVariant: add tests for size() 2022-04-27 15:08:13 +02:00
1d103a1528 MemberProxy: move tests for createNestedArray() and createNestedObject() 2022-04-27 15:07:26 +02:00
7b19a4b6e7 Add getMemberConst() and getElementConst() 2022-04-27 15:07:26 +02:00
ac1d29fac0 Add meta function ConverterNeedsWriteableRef<T> 2022-04-27 15:07:26 +02:00
98037e5742 Move several functions from VariantImpl.hpp to VariantRef.hpp 2022-04-27 15:07:26 +02:00
d0e3808dd0 Move declaration of VariantConstRef above VariantRef 2022-04-27 15:07:25 +02:00
3760a643cb Implement comparison out of VariantData 2022-04-27 15:07:25 +02:00
fc9d8aa31e Implement nesting() out of VariantData 2022-04-07 21:11:31 +02:00
ccfbb5fd1d Fix 9.22337e+18 outside range of representable values of type 'long' 2022-04-07 20:59:20 +02:00
c9fbc5e40a README: remove utm_source/utm_medium to make links more readable (#1735) 2022-04-07 18:49:39 +02:00
67b6797b6d Set version to 6.19.4 2022-04-05 10:53:11 +02:00
8d9504239b Fix comparisons operators with const JsonDocument& 2022-04-05 10:12:17 +02:00
bf5d0c790c Add implicit conversion from JsonDocument to JsonVariant 2022-03-23 17:17:35 +01:00
f4379f97ae Format code with clang-format 2022-03-23 17:17:35 +01:00
3dc67c5663 Add memoryUsage() to ElementProxy and MemberProxy (fixes #1730) 2022-03-19 12:11:40 +01:00
47f90b02c3 CI: run apt-get update before installing g++-multilib 2022-03-09 08:33:26 +01:00
27c924746b CI: run apt-get update before installing valgrind 2022-03-08 19:09:56 +01:00
7abf875071 Set version to 6.19.3 2022-03-08 17:24:14 +01:00
e3e375f5cd MessagePack: serialize round floats as integers (fixes #1718) 2022-02-28 19:38:26 +01:00
ff06292d74 Fix -Wsign-conversion -funsigned-char (fixes #1715) 2022-02-28 10:00:12 +01:00
c1278797f2 CI: use -funsigned-char in one GCC build (issue #1715) 2022-02-28 09:50:32 +01:00
421ecec0dd Tests: trim trailing white spaces 2022-02-25 10:28:42 +01:00
89ed54362b Fix -Wsign-conversion on GCC 8 (fixes #1715) 2022-02-25 10:28:42 +01:00
986f77fa15 Tests: link with -static on MinGW 2022-02-25 10:28:22 +01:00
f831ed395d Fix JsonString operator == and != for non-zero-terminated string 2022-02-17 17:33:16 +01:00
a880614a75 Fix call of overloaded 'String(const char*, int)' is ambiguous 2022-02-17 17:33:16 +01:00
ef8379df1b Set version to 6.19.2 2022-02-14 09:06:06 +01:00
702f8c2e2f Fix cannot convert 'pgm_p' to 'const void*' (fixes #1707) 2022-02-06 11:14:23 +01:00
6806393285 Wandbox: update compiler version 2022-01-14 09:23:12 +01:00
dea8387586 Publish script: don't stop if wandbox fails 2022-01-14 09:22:55 +01:00
6ea2815341 Set version to 6.19.1 2022-01-14 08:49:57 +01:00
3c145f1782 Add assertions to comfort Clang-Tidy 2022-01-13 20:25:49 +01:00
21b2c76524 Fix filter not working in zero-copy mode (fixes #1697) 2022-01-13 20:25:49 +01:00
4f6244eef4 Replace CopiedString and LinkedString with JsonString 2022-01-13 16:15:53 +01:00
973858b835 Remove unused CopiedString in MemoryPool 2022-01-13 16:10:42 +01:00
ee12155617 Fix crash when adding an object member in a too small JsonDocument 2022-01-13 11:52:45 +01:00
4b4c68df5f Changelog: remove empty line 2022-01-13 11:52:45 +01:00
fcae33d574 Publish script: fix change log extraction code 2022-01-08 17:59:07 +01:00
896f50eeb9 Publish script: check that all required commands are available 2022-01-08 16:40:21 +01:00
9693fd2d74 Set version to 6.19.0 2022-01-08 16:21:29 +01:00
37f1c87338 Publish script: check that all changes are committed 2022-01-08 16:21:09 +01:00
4977de38fc Remove .devcontainer/ 2022-01-05 12:08:30 +01:00
9f4750637b Add PlatformIO badge to README 2022-01-05 12:08:18 +01:00
0c65e13aa3 Add LGTM grade badge to README 2022-01-02 10:12:13 +01:00
af18994deb Update copyright notice 2022-01-01 10:01:05 +01:00
8f9599cd19 Format appveyor.yml 2022-01-01 10:01:05 +01:00
78660c6e07 Fix support of long long in catch 2022-01-01 10:01:05 +01:00
4f786db82d CI: build on multiple versions of MinGW 2022-01-01 09:51:05 +01:00
ad7b749dec CI: build with arduino-cli 2021-12-31 14:39:39 +01:00
29ba744d64 Add a polyfill for pgm_read_ptr() (issue #1433) 2021-12-31 14:39:38 +01:00
a2e1021d7d Use pgm_read_dword() instead of pgm_read_float() (issue #1433) 2021-12-31 14:39:38 +01:00
d20c3c65c8 Add a polyfill for pgm_read_dword() (issue #1433) 2021-12-31 14:39:38 +01:00
8f029e6096 Fix Visual Studio command line error D9025
https://stackoverflow.com/a/58711983/1164966
2021-12-31 14:39:38 +01:00
91ed68b4a6 Fix conflicting definition of ARDUINOJSON_DEFINE_STATIC_ARRAY() 2021-12-31 14:39:38 +01:00
67fc2d9897 Assume PROGMEM is available as soon as ARDUINO is defined (#1693) 2021-12-31 11:00:50 +01:00
055304bf01 Ignore Visual Studio's /out/ folder 2021-12-29 10:23:15 +01:00
c2800ace32 Include Arduino.h before stdlib.h to avoid conflict (closes #1693) 2021-12-27 13:16:24 +01:00
ec7ffa20f2 Avoid Arduino.h when all its features are disabled (fixes #1692) 2021-12-27 13:16:24 +01:00
ada1f2a894 Add support for char[][] in copyArray() 2021-12-20 17:51:44 +01:00
184a7c4fbd Add support for arbitrary array rank in copyArray() 2021-12-20 17:51:27 +01:00
84e9447f12 Remove redundant copy constructor of AllocatorOwner 2021-12-19 14:08:19 +01:00
ca073fda46 Remove version 5 from change log 2021-12-16 14:56:28 +01:00
0f529a3587 Renamed undocumented function isUndefined() to isUnbound() 2021-12-16 14:55:26 +01:00
e16767af92 Avoid pool reallocation in BasicJsonDocument's copy assignment 2021-12-16 14:42:54 +01:00
3166356484 Test capacity after calling BasicJsonDocument's copy assignment 2021-12-16 14:28:30 +01:00
abdd9d81db Reorder lines in changelog 2021-12-14 10:42:01 +01:00
3bf47761c8 Fix return type of StaticJsonDocument::operator= 2021-12-14 10:41:25 +01:00
f39d8f548f CI: Add Visual Studio 2022 2021-12-12 15:48:51 +01:00
90d750e4d9 Increase coverage 2021-12-07 16:08:44 +01:00
ca24ed48f5 Separate string adapter from storage policy 2021-12-07 16:08:44 +01:00
51937778dd Add operator<<(std::ostream&, const JsonString&) 2021-12-07 16:08:44 +01:00
be70f6ddd7 Support NUL inside string values (issue #1646) 2021-12-07 16:08:44 +01:00
a27398e445 Check for NUL terminator in MemoryPool::findString() 2021-11-24 19:06:49 +01:00
43b2e2e774 Append terminator in saveStringFromFreeZone() 2021-11-24 19:06:49 +01:00
62f9b94ab1 Add CopiedString and LinkedString 2021-11-24 19:06:49 +01:00
b06bbd9d2a Fix inconsistent pool size in BasicJsonDocument's copy constructor 2021-11-23 10:49:35 +01:00
2df1bc7d4f Fix call of overloaded 'swap(...)' is ambiguous (fixes #1678) 2021-11-23 10:47:31 +01:00
599e927590 Fix JsonVariant::memoryUsage() for raw strings 2021-11-12 16:55:41 +01:00
0429016ff1 Remove IsWriteableString 2021-11-12 15:28:33 +01:00
bd42b9638a README: add sponsors section 2021-11-11 09:45:59 +01:00
b1a826b03a README: remove empty lines between the badges 2021-11-11 09:23:58 +01:00
5ed5f3687b Improve test coverage 2021-10-24 09:58:39 +02:00
943a902a0b Remove DeserializationError == bool and DeserializationError != bool 2021-10-24 09:58:39 +02:00
a7873389c6 Change VariantData::asString() return type to JsonString 2021-10-24 09:58:39 +02:00
acfa174333 Add safe bool idiom in JsonString 2021-10-24 09:58:39 +02:00
8418845c8d Add is<JsonString>() 2021-10-24 09:58:39 +02:00
df4a4b9e1d Add as<JsonString>() 2021-10-24 09:58:13 +02:00
7f5497db55 VSCode: exclude catch/ from search 2021-10-22 14:11:50 +02:00
e4658e963f Change the default of ARDUINOJSON_USE_LONG_LONG to 1 on 32-bit platforms 2021-10-19 22:25:45 +02:00
7764515f56 Change the default of ARDUINOJSON_USE_DOUBLE to 1 2021-10-19 22:25:45 +02:00
7046c38c84 Remove ARDUINOJSON_EMBEDDED_MODE 2021-10-19 22:25:45 +02:00
9e9bb30a57 CI: Test ArduinoJson's configuration 2021-10-19 15:36:32 +02:00
41d1be24cc Update GitHub issue templates 2021-10-11 15:20:14 +02:00
7d3b475e24 Update the README 2021-10-11 15:17:36 +02:00
f82a227da6 Set version to 6.18.5 2021-09-28 17:18:44 +02:00
fcd8159617 Set ARDUINOJSON_EMBEDDED_MODE to 1 on Nios II (closes #1657) 2021-09-28 15:58:18 +02:00
f51ccb5c3f README: added link to Discord server 2021-09-21 16:20:52 +02:00
e0cd5b6405 Increased test coverage 2021-09-12 10:13:12 +02:00
6a71f31820 Set version to 6.18.4 2021-09-06 09:11:22 +02:00
3428ab1e89 Added a comment to easily diagnose issue #1648 2021-09-03 08:31:51 +02:00
956e4a7cbb Fixed deserialization of \u0000 (issue #1646) 2021-08-31 14:23:58 +02:00
669bad27d4 CI: added a workaround for adafruit/Adafruit_nRF52_Arduino#653 2021-08-22 18:01:56 +02:00
2c3ae1c181 Filter: exact match takes precedence over wildcard (fixes #1628) 2021-08-13 10:35:15 +02:00
f570fe8c37 Fixed error expected unqualified-id on GCC 11 (fixes #1622) 2021-08-03 11:39:18 +02:00
1b74ad0731 Fixed error 'dummy' may be used uninitialized on GCC 11 2021-08-03 11:39:07 +02:00
6717700d3b CI: added GCC 11 2021-08-03 10:42:37 +02:00
b810833145 Set version to 6.18.3 2021-07-27 15:44:36 +02:00
9d58e566fd Added as<std::string_view>() and is<std::string_view>() 2021-07-27 14:16:39 +02:00
6632fa8da1 Removed StringAdapter::equals() 2021-07-27 14:16:39 +02:00
5790f3c8f7 Refactored string adapters: only one IsString<T> and adaptString() 2021-07-27 14:16:18 +02:00
4073b52c00 Changed return type of convertToJson() and Converter::toJson() to void 2021-07-23 15:11:48 +02:00
f5c7a6478e Publish script: fixed frontmatter for arduinojson.org 2021-07-19 10:19:04 +02:00
ebf58320ca Set version to 6.18.2 2021-07-19 10:11:21 +02:00
09ddb0f824 Publish script: generate the file for arduinojson.org 2021-07-19 09:58:01 +02:00
f02a699c26 CI: added a workflow to create a release when matching tag is pushed 2021-07-16 11:06:50 +02:00
67d0931c19 Added parameters to script build-arduino-package.sh 2021-07-16 09:35:32 +02:00
19d079c33c Removed a symlink because the Arduino Library Specification forbids it 2021-07-15 12:50:22 +02:00
40723a4cc7 CI: check that the repository doesn't contain any symlink
The Arduino Library Specification forbids symlinks, that's probably the reason why version 6.18.1 is missing from the Library Manager.
2021-07-15 12:50:22 +02:00
8a9a26588c Fixed publish script 2021-07-03 16:08:36 +02:00
219475630a Set version to 6.18.1 2021-07-03 16:03:01 +02:00
52e856fa6f CI: added ESP-IDF component build (closes #1599) 2021-06-30 13:34:59 +02:00
cb2c029e57 Added support for ESP-IDF component build (closes #1562) 2021-06-30 10:29:28 +02:00
ef7579394b Fixed JsonVariant::as<unsigned>() (fixes #1601) 2021-06-30 09:58:03 +02:00
fc4f175300 CI: fixed ARM compiler installation 2021-06-28 09:10:15 +02:00
a6fc9311b4 Added JsonArray::clear() (fixes #1597) 2021-06-26 11:29:15 +02:00
14639f129e CMake: added empty line at end of each file 2021-06-26 11:29:15 +02:00
9182c2068d Fixed build-single-header.sh (fixes #1592) 2021-06-21 16:11:02 +02:00
cb1b3be723 CI: build single headers 2021-06-21 16:11:02 +02:00
5ccd62a789 Updated the readme 2021-06-18 11:39:00 +02:00
145d45c746 Fixed warning on Clang 10 2021-06-17 20:41:04 +02:00
f235157466 Added support for std::string_view (closes #1578, closes #1554) 2021-06-17 20:41:04 +02:00
ba5cdab619 Test: extracted executable Cpp11Tests 2021-06-17 20:28:09 +02:00
eab5ae2f07 Simplified string adapters 2021-06-16 21:08:05 +02:00
2f0b3c0e63 VSCode: added devcontainer configuration 2021-06-16 21:08:05 +02:00
4e261068a1 clang-format: set IndentPPDirectives to AfterHash 2021-06-16 21:08:01 +02:00
1d24caf066 Added InvalidConversion to identify invalid conversions (closes #1585) 2021-06-11 11:54:52 +02:00
dc76c5165f Fixed clang-tidy warnings (fixes #1574) 2021-06-04 12:00:33 +02:00
de11b36a98 clang-tidy: muted "uninitialized pointer/field" in StringCopier 2021-06-04 11:38:21 +02:00
c4a4ed5272 clang-tidy: muted "uninitialized field" in Latch 2021-06-04 11:37:07 +02:00
a24edac5a9 clang-tidy: muted "use of memory after it is freed" in MemoryPool 2021-06-04 11:37:07 +02:00
9dbf44388d clang-tidy: muted "call to function is insecure" in tests 2021-06-04 11:37:07 +02:00
6b8e93e05e clang-tidy: fixed "uninitialized field" in VariantData 2021-06-04 11:36:20 +02:00
6b5239b9d5 clang-tidy: removed unused field 2021-06-04 11:16:24 +02:00
214c06b771 clang-tidy: fixed clang-analyzer-optin.cplusplus.UninitializedObject 2021-06-04 11:16:17 +02:00
e32a8552be CI: added clang-tidy (closes #1577) 2021-06-04 11:00:16 +02:00
9bcb409648 Fixed serializeJson(doc, String) when allocation fails (fixes #1572) 2021-05-30 21:34:07 +02:00
3b10afd2ab CI: test more platforms on PlatformIO 2021-05-30 18:45:40 +02:00
af3bb131c8 Fixed error Pe070 "incomplete type is not allowed" on IAR (fixes #1560) 2021-05-19 15:07:59 +02:00
622e7dd287 Fixed support for volatile float and double (fixes #1557) 2021-05-19 15:01:51 +02:00
68082e6fc1 CI: use libc++ for Clang 3.5 to 4.0
The fixes the error: "__STRICT_ANSI__ seems to have been undefined; this is not supported" with Clang 3.9
2021-05-17 09:06:28 +02:00
36bcc7b355 Set version to 6.18.0 2021-05-05 20:41:35 +02:00
c7c0b729c1 Added a deprecation warning for is<char>() and is<char*>() 2021-05-05 15:43:02 +02:00
6aeefda3b6 CI: Skip WillFail and Fuzzing test labels when measuring coverage 2021-05-04 16:36:21 +02:00
4780174ee1 Added a deprecation warning for as<char>() and set(char) 2021-05-04 16:10:50 +02:00
ab23625091 Renamed DEPRECATED to ARDUINOJSON_DEPRECATED 2021-05-04 14:44:07 +02:00
a88cf8fab7 PlatformIO: set build.libArchive to false (closes #1550) 2021-05-03 08:55:20 +02:00
2be528a3fa serializeMsgPack(doc, p, n) doesn't add terminator anymore (fixes #1545) 2021-04-29 20:59:15 +02:00
337864618c Reversed parameters of convertToJson() and convertFromJson()
Now the order matches copyArray(): source first, destination second.
2021-04-28 10:25:39 +02:00
526cad54d7 VSCode: insert final new line 2021-04-27 18:25:42 +02:00
506cf7f438 Added .prettierignore 2021-04-27 18:25:42 +02:00
4b89878c10 Added a deprecation warning for as<char*>() 2021-04-27 18:25:42 +02:00
06fad301cb CI: added Valgrind job (closes #1542) 2021-04-25 20:58:22 +02:00
7be0c2c650 CMake: added labels to tests 2021-04-25 11:38:19 +02:00
43f0db45ad Updated Catch library to 1.12.2 2021-04-22 08:54:16 +02:00
892c37db08 Optimized JsonVariant::is<float>() 2021-04-21 13:21:40 +02:00
d8a1d1a120 Increased coverage of ConverterImpl.hpp 2021-04-18 17:23:51 +02:00
64e52e97ee Removed redundant range check in MemoryPoolPrint 2021-04-18 16:47:28 +02:00
2a777a659a Fixed reference-binding-to-null-pointer in MsgPack deserializer 2021-04-15 14:56:59 +02:00
898f429826 Fixed member-call-on-null-pointer in getMember() when array is empty 2021-04-15 14:56:59 +02:00
88fbe3ac34 Fixed undefined behavior in JSON serializer 2021-04-15 14:56:59 +02:00
4ddc674846 CI: fixed sanitizers errors not been reported 2021-04-15 11:11:50 +02:00
fc4f5fd05f Changed integer storage from positive/negative to signed/unsigned 2021-04-14 11:45:01 +02:00
a002393716 Replaced donation link 2021-04-14 11:45:01 +02:00
a889f6560c Added VSCode settings 2021-04-14 11:43:51 +02:00
4db17ecd93 CI: format YAML file with Prettier 2021-04-08 09:46:01 +02:00
2a57f2b365 CI: fix installation of GCC and Clang 2021-04-08 09:45:04 +02:00
803e07c188 Updated folders list in .mbedignore (closes #1515) 2021-03-31 09:58:51 +02:00
ff44d93e68 Removed buggy blank line in CHANGELOG 2021-03-29 19:35:25 +02:00
d5d2209d09 Added "https://" prefix to all URLs so they are clickable in VS Code 2021-03-29 19:35:25 +02:00
c81e8fc93a README: added a link to ARDUINOJSON_ENABLE_ARDUINO_STREAM 2021-03-29 18:10:00 +02:00
347ac422f4 Added support for Printable (closes #1444) 2021-03-27 14:35:15 +01:00
d7f5b56ca4 Added support for custom converters (closes #687) 2021-03-20 14:52:47 +01:00
53d6f0d492 CI: Fixed build on Arduino 1.6.7 2021-03-19 11:50:29 +01:00
e4ce75e20c Simplified JsonVariant::as<T>() to always return T 2021-03-08 19:33:52 +01:00
9094179856 CI: added a clang-format job 2021-02-26 13:13:11 +01:00
3aab36fec2 Changed JsonVariantConst::is<JsonArray/JsonObject>() to return false (closes #1412) 2021-02-25 19:19:23 +01:00
744d61f6fd Added JsonVariant::is<JsonVariant/JsonVariantConst>() (issue #1412) 2021-02-23 08:41:24 +01:00
05498aa178 Added JsonVariant::is<JsonVariant>() (issue #1412) 2021-02-23 08:39:58 +01:00
b1eb273d5b Added JsonVariant::is<JsonArrayConst/JsonObjectConst>() (issue #1412) 2021-02-23 08:33:28 +01:00
8a3f8510d6 Simplified tests of JsonVariant::is<T>() 2021-02-23 08:27:48 +01:00
22904a48a6 Added a default implementation in the Visitor class 2021-02-21 13:37:07 +01:00
1730304f46 Funding: added paypal.me 2021-02-21 12:24:46 +01:00
1038fc35df Removed DeserializationError::NotSupported 2021-02-18 19:41:15 +01:00
71f44aaee1 deserializeMsgPack() inserts null instead of returning NotSupported 2021-02-18 19:40:25 +01:00
cc7ebfd11e deserializeJson() leaves \uXXXX instead of returning NotSupported 2021-02-18 19:40:11 +01:00
54d4b308f4 Remove JsonVariant::set(char) 2021-02-18 08:48:28 +01:00
5234c8124b Removed JsonVariant::as<char>() (fixes #1498) 2021-02-18 08:48:10 +01:00
e22d4bf31f Set version to 6.17.3 2021-02-15 09:53:10 +01:00
21f7b90f03 PlatformIO: set framework compatibility to * (closes #1490) 2021-02-15 09:49:56 +01:00
769e8440f5 CI: skip Particle job for Pull Requests 2021-02-05 13:00:56 +01:00
33de2b6cf3 Added GitHub sponsors 2021-02-05 12:03:50 +01:00
3975b07371 Moved CI from Travis to GitHub Actions (fixes #1493) 2021-02-03 21:33:18 +01:00
abd64102aa Fixed compilation error on Clang 10 2021-02-03 12:56:26 +01:00
d2174d1580 Fixed compilation error when isdigit() is a macro (fixes #1487) 2021-02-02 10:08:10 +01:00
c72eccdd35 Added missing calls to client.stop() in JsonHttpClient.ino (fixes #1485) 2021-02-01 09:16:23 +01:00
ab902128dc Upgrade to Lock Threads 2 2021-01-31 11:00:05 +01:00
c70a491f59 Made JsonDocument's destructor protected (fixes #1480) 2021-01-27 10:00:10 +01:00
322d13de0d Examples: add a note about performance issues with streams (#1476) 2021-01-25 09:26:29 +01:00
97b7161d78 Update copyright notice for 2021 2021-01-25 09:14:15 +01:00
1360b6a396 Set version to 6.17.2 2020-11-14 10:38:21 +01:00
16e51b83ab Changed the default value of ARDUINOJSON_ENABLE_PROGMEM (fixes #1433)
It now checks that the pgm_read_XXX macros are defined before enabling PROGMEM.
2020-11-10 14:58:31 +01:00
aa7cc5351c Travis: added smoke test for Particle Argon 2020-11-10 14:46:45 +01:00
30da920135 Fixed invalid conversion in operator|(Variant, char*) (fixes #1432) 2020-11-09 09:21:19 +01:00
bcdf5b7e52 Set version to 6.17.1 2020-11-07 10:11:41 +01:00
c711fe592d Allowed more than 32767 values in non-embedded mode (fixes #1414) 2020-10-28 09:59:40 +01:00
9d5c1b3742 Added an assert to detect too large variants (issue #1414) 2020-10-24 09:39:03 +02:00
6b26cd0977 Add JsonDocument to keywords.txt
see #1413
2020-10-24 09:37:16 +02:00
10ec0f21b0 Fixed operator|(MemberProxy, JsonObject) (fixes #1415) 2020-10-23 10:48:33 +02:00
ff66182dc6 Gathered the tests of MemberProxy in one file 2020-10-22 09:37:05 +02:00
d02ce2f1bb Gathered the tests of ElementProxy in one file 2020-10-22 09:37:05 +02:00
2664a2d0da Fixed error "ambiguous overload for operator|" (fixes #1411) 2020-10-22 09:30:31 +02:00
1f7350658e Set version to 6.17.0 2020-10-19 11:35:09 +02:00
41132b701b Fixed error "no matching function for pgm_read<double>()" on AVR 2020-10-17 14:02:26 +02:00
712005219c Added filtering for MessagePack (closes #1298, closes #1394) 2020-10-13 09:40:39 +02:00
0bd17aff8a Coverage: use -O0 instead of -Og 2020-10-11 15:10:52 +02:00
f3f44d7812 Renamed StdStringAdapter to StlStringAdapter (internal use only) 2020-10-01 10:01:33 +02:00
8385d5fa3a Added wildcard key (*) for filters (closes #1309) 2020-09-28 21:11:38 +02:00
726f8be341 Added operator|(JsonVariantConst, JsonVariantConst) 2020-09-26 14:48:17 +02:00
fee029b86e Moved float tables to PROGMEM 2020-09-19 16:12:49 +02:00
c3504ddf0a Added tests for DeserializationError::f_str() 2020-09-18 19:06:21 +02:00
6a878ee444 Fixed error "No such file or directory WString.h" (fixes #1381) 2020-09-16 10:29:20 +02:00
c4ec2ba88f Added DeserializationError::f_str() (issue #846) 2020-09-14 18:40:00 +02:00
c907ca6e5d Added DeserializationError::EmptyInput 2020-09-13 10:27:29 +02:00
8993a093e9 Travis: run sanitizer on recent GCC version to avoid false positives 2020-09-13 10:25:34 +02:00
d04669d0cc Fixed result of JsonVariant::set((char*)0) (fixes #1368) 2020-09-05 17:33:47 +02:00
05fc136915 Disabled memory sanitizer with clang 6 2020-09-05 13:44:40 +02:00
8d37939086 Added JsonDocument::overflowed() (closes #1358) 2020-09-05 13:44:40 +02:00
6d2ad4539f Simplified the implementation of parseNumber() 2020-09-04 09:23:40 +02:00
5ab53f42b2 Added a return value to visitors 2020-08-29 18:40:27 +02:00
f448e805e9 Removed dead code 2020-08-25 14:36:14 +02:00
67aa8efd5a Added a build failure when nullptr is defined as a macro (closes #1355) 2020-08-23 09:31:40 +02:00
61a5273aea Set version to 6.16.1 2020-08-04 10:33:38 +02:00
35a39b8d8f Fixed deserializeJson() that stopped reading after {} (fixes #1335) 2020-08-04 09:52:42 +02:00
96b6571352 Fixed use-of-uninitialized-value in encodeCodepoint() 2020-08-03 13:44:45 +02:00
74e7dd053f Added memory sanitizer to fuzzers 2020-08-03 13:44:45 +02:00
1f8636d762 Fixed build-arduino-package.sh to ignore .vs/ 2020-08-01 15:35:04 +02:00
e4cfa701d8 Fixed publish.sh to commit CMakeLists.txt 2020-08-01 15:34:27 +02:00
b85181a6db Set version to 6.16.0 2020-08-01 15:17:39 +02:00
6841b80466 Added JsonString::operator!= 2020-07-31 14:02:20 +02:00
298864bafe Set ARDUINOJSON_DECODE_UNICODE to 1 by default 2020-07-30 09:49:09 +02:00
4d7f03836c Added a test that removes an element during iteration (#1332) 2020-07-30 09:20:31 +02:00
c63eb80b95 Shortened the name of the private namespace using hexadecimal digits 2020-07-30 09:18:08 +02:00
0c0bf80074 Suppress IAR compiler warning. 2020-07-28 10:12:41 +02:00
144ff3b06e Updated the change log. Closes #1210 and closes #1314. 2020-07-26 16:09:03 +02:00
d6c50c3596 Reduced stack usage when compiled with -Og (issue #1210)
This saves 128 bytes on ESP8266
2020-07-26 14:51:58 +02:00
51b177ce47 Reduced stack usage when compiled with -Og (issue #1210)
This saves 112 bytes on ESP8266
2020-07-26 12:58:12 +02:00
824b7a25ca Reduced stack usage when compiled with -Og (issue #1210)
This saves 96 bytes on ESP8266
2020-07-26 12:25:13 +02:00
2223d40640 Reduced stack usage when compiler aggressively inlines deserializeJson()
This saves 64 bytes on the recursive part.
2020-07-26 12:25:13 +02:00
4df29fbac1 Fixed "linked" strings incorrectly marked as "owned" (fixes #1318) 2020-07-24 22:25:56 +02:00
6dc36125c2 Added ElementProxy::getOrAddElement() (fixes #1311) 2020-07-23 10:58:47 +02:00
40085609e2 Fixed copyArray() not working with MemberProxy and ElementProxy 2020-07-22 21:08:18 +02:00
ebb6d80092 Fixed copyArray() not working with String 2020-07-22 20:02:33 +02:00
764ff2cd53 Added string deduplication (closes #1303) 2020-07-21 20:15:31 +02:00
8ef226bcb8 Travis: Added Clang 9. Removed Xcode 7.3 2020-07-15 15:27:39 +02:00
63606c0985 Added json_fuzzer and msgpack_fuzzer in test suite 2020-07-15 12:50:00 +02:00
1600d39693 Refactored StringBuilder into StringStorage 2020-07-11 17:51:45 +02:00
04c59985a1 Inverted dependency between MemoryPool and string adapters.
Inserted a null after each raw string in the pool.
2020-07-08 09:38:27 +02:00
7e58347fbe Added comparisons between JsonVariants 2020-07-02 15:28:34 +02:00
0e794a28a1 Simplified implementation of comparison operators 2020-06-13 15:42:04 +02:00
6fb52c3638 Set version to 6.15.2 2020-05-15 09:26:25 +02:00
b72ef09451 Fixed publish script 2020-05-15 09:26:06 +02:00
f7de027617 Break build if using 64-bit integers with ARDUINOJSON_USE_LONG_LONG==0 2020-05-14 10:25:10 +02:00
bc4c2dde33 Moved failing builds to a dedicated folder 2020-05-12 18:11:55 +02:00
95f05dad66 Added JsonVariant as an input type for deserializeXxx() 2020-05-05 13:16:32 +02:00
3bb0a7aa8e Added support for enums in as<T>() and is<T>() (fixes #1256) 2020-05-04 11:13:06 +02:00
dcf7eeef28 CMake: used link_libraries() instead of target_link_libraries() 2020-05-03 10:25:38 +02:00
3b923b6e4e Added support for JsonDocument to copyArray() (issue #1255) 2020-05-02 10:00:08 +02:00
8050f7404b CMake: gathered all build flags in a dedicated file 2020-04-28 16:02:59 +02:00
959b1d9e4c Fixed error C2766 with flag /Zc:__cplusplus on VS2017+ (fixes #1250) 2020-04-28 16:02:38 +02:00
daa279d57b CMake: made project arch-independent 2020-04-11 18:49:28 +02:00
ae9b7926a2 CMake: don't build tests when imported in another project 2020-04-11 18:49:28 +02:00
1f7a5e6943 Fixed links in README 2020-04-11 11:53:08 +02:00
9e354803de Changed publish.sh to update the CMake project version 2020-04-09 21:28:48 +02:00
3ea5eb3f3a Set version to 6.15.1 2020-04-08 18:23:27 +02:00
ec43bf4fe9 Simplified the implementation of implicit casts 2020-04-08 18:18:18 +02:00
2097ffaabf Updated README 2020-04-08 11:16:22 +02:00
67e78f0751 Disabled alignment on AVR (fixes #1231) 2020-04-08 11:16:22 +02:00
1791dccbf2 Added CMake "install" target (closes #1209) 2020-04-07 21:43:10 +02:00
40d1cfe7af Fixed "pointless integer comparison" warning on IAR (issue #1233) 2020-04-06 18:20:12 +02:00
4627f851ca Fixed "statement is unreachable" warning on IAR (issue #1233) 2020-04-06 18:19:32 +02:00
fc9e609ab5 Fixed "maybe-uninitialized" warning (fixes #1217) 2020-03-25 08:37:57 +01:00
8b3d861a9d Updated README 2020-03-23 13:39:58 +01:00
9ef864b27c Fixed markup in changelog 2020-03-23 11:03:30 +01:00
275b80a462 Updated library description 2020-03-23 11:02:58 +01:00
763be4f266 Set version to 6.15.0 2020-03-22 21:02:38 +01:00
5b812522fa Enabled debug mode when PlatformIO builds in debug 2020-03-20 20:58:08 +01:00
9cb0ddb5e7 Removed the copy-constructor of JsonDocument (issue #1189) 2020-03-05 13:46:45 +01:00
735bea1f47 Added StaticJsonDocument::garbageCollect() 2020-03-02 14:50:16 +01:00
0853b04589 Changed BasicJsonDocument's copy-constructor to copy the capacity 2020-03-02 12:39:29 +01:00
c1b3705df1 Added BasicJsonDocument::garbageCollect() (issue #1195) 2020-03-01 18:01:55 +01:00
2540b4e01b Added move-constructor and move-assignment to BasicJsonDocument 2020-03-01 17:24:29 +01:00
2641697e0b Fixed incorrect string comparison on some platforms (fixes #1198) 2020-02-27 11:44:09 +01:00
2996503b27 Fixed enums serialized as booleans (fixes #1197) 2020-02-26 16:16:20 +01:00
0214c9bcad Improved coverage of JsonObject 2020-02-23 13:03:14 +01:00
a471aed6db Improved coverage of JsonObject 2020-02-22 14:17:10 +01:00
af0edecddb Fixed MemberProxy::set(char[]) not duplicating the string (fixes #1191) 2020-02-22 12:06:39 +01:00
300323cfd7 Improved coverage of JsonArray 2020-02-20 09:18:10 +01:00
d8724e0a0b Changed the array subscript to automatically add missing elements 2020-02-20 08:59:25 +01:00
0001dabfd1 Improved coverage of MemoryPool 2020-02-19 17:27:04 +01:00
ad78001241 Removed useless null checks 2020-02-19 17:22:23 +01:00
5a837a591e Improved coverage of MsgPackDeserializer 2020-02-19 17:14:40 +01:00
fd79d23910 Updated copyright year 2020-02-19 16:07:34 +01:00
1902c0ec93 Improved coverage of JsonDeserializer 2020-02-19 10:31:56 +01:00
85499be855 Added tests for FlashStringAdapter 2020-02-16 17:56:47 +01:00
e6ddfc7afb Fixed static JsonString not being saved by reference 2020-02-16 17:34:04 +01:00
58298ec5ba Extracted storage_policy to improve coverage in string adapters 2020-02-16 17:34:04 +01:00
0814fc185f Added a line-break after each "if" to get more accurate coverage report 2020-02-16 15:05:23 +01:00
8f8c82d400 Reduced code size 2020-02-13 17:05:08 +01:00
372b7d3d9d Exposed JsonPairConst 2020-02-13 16:58:23 +01:00
fbffadb2cf Moved nesting decrement logic to class NestingLimit 2020-02-13 16:54:18 +01:00
6e52f242b2 Extracted the class Latch
also fixed a buffer overrun and reduced the code size
2020-02-13 14:53:54 +01:00
d2a67f362f Fixed "deprecated-copy" warning on GCC 9 (fixes #1184) 2020-02-13 11:07:40 +01:00
66b12da4e7 Added DeserializationOption::Filter (closes #959) 2020-02-12 17:22:42 +01:00
42b0d6a83d Set version to 6.14.1 2020-01-27 15:05:36 +01:00
94b1c75fd2 Added getElement() and getMember() to JsonVariantConst 2020-01-27 12:35:32 +01:00
b04b549b34 Delete .bak file produced during publish 2020-01-27 12:10:11 +01:00
09d4b2cd38 Fixed regression in UTF16 decoding (fixes #1173) 2020-01-27 12:10:10 +01:00
ddfe7d8b91 Set version to 6.14.0 2020-01-16 20:48:03 +01:00
4a657ca87f Update the features section of the README page 2020-01-16 20:46:25 +01:00
1e3d478998 Improved speed of serializeXxx() when writing to a String 2020-01-14 14:50:44 +01:00
3aebef6d0a Fixed value returned by serializeXxx() when writing to a String 2020-01-14 11:22:44 +01:00
25879466da Fixed variant.is<nullptr_t>() 2020-01-13 20:47:43 +01:00
27ec1afb7a Configure the "lock-threads" app 2020-01-13 18:23:30 +01:00
06a0d1a872 Added measureJson, measureJsonPretty, and measureMsgPack to keywords 2020-01-13 18:20:05 +01:00
04fe7e1a27 Added ARDUINOJSON_ENABLE_COMMENTS to enable support for comments 2020-01-13 18:16:02 +01:00
f9cfea244a Updated copyright notice 2020-01-09 15:48:38 +01:00
5ec062cc71 Reduced Unicode conversion code size (-122 bytes on AVR) 2020-01-09 15:39:45 +01:00
91b808381e Improved decoding of UTF-16 surrogate pairs (closes #1157) 2020-01-08 09:55:43 +01:00
8550418875 Auto enable std::string and stream on modern compilers (closes #1156) 2020-01-04 15:05:20 +01:00
00c391320c Added support for CMake's unity builds 2019-12-24 16:42:34 +01:00
9723682d20 AppVeyor: added Visual Studio 2019 2019-12-24 16:10:11 +01:00
8bf6f6e09f Added support uint8_t for serializeMsgPack() (closes #1142) 2019-12-13 14:15:30 +01:00
062c1c13b5 Added BasicJsonDocument::shrinkToFit() 2019-11-07 15:40:20 +01:00
1b8107094f Set version to 6.13.0 2019-11-01 10:32:45 +01:00
8721ac88b1 Reorganized writer classes 2019-10-31 19:27:23 +01:00
6da6f921cd Fixed dangling reference in MemberProxy and ElementProxy (fixes #1120) 2019-10-30 19:09:21 +01:00
ef63757b1a Fixed deserializer that stopped reading at the first 0xFF (closes #1118) 2019-10-29 14:17:11 +01:00
3a169df0a5 Added support for custom reader classes 2019-10-25 11:39:04 +02:00
d4f819f1f0 Added detection of Atmel AVR8/GNU C Compiler (fixes #1112) 2019-10-18 22:10:35 +02:00
16fe3c0acc Improved deserializeMsgPack() speed by reading several bytes at once 2019-10-14 12:02:26 +02:00
fd8f4eb3a6 Moved msgpack.org.md to github.com/bblanchon/ArduinoJson-msgpack.org 2019-10-11 09:07:25 +02:00
b261eca865 esp-idf make system 2019-10-07 09:00:31 +02:00
a37480eec9 Fixed deserializeJson() when input contains duplicate keys (fixes #1095) 2019-09-27 10:07:29 +02:00
713aaa3d68 Added msgpack.org.md
https://github.com/msgpack/website/blob/master/README.md#how-to-list-up-your-project-on-msgpackorg
2019-09-26 09:52:50 +02:00
7d1d0c4e67 Added conversion from JsonArray/JsonObject to bool 2019-09-24 09:38:00 +02:00
4ad05dbaef Replaced GitHub stars badge 2019-09-19 09:28:57 +02:00
38371aae62 Added OSS-Fuzz badge 2019-09-19 09:28:49 +02:00
498a2e4c1e Added support for custom writer classes (closes #1088) 2019-09-13 14:10:21 +02:00
2078871f36 Added missing #include <ArduinoJson/Namespace.hpp> 2019-09-13 12:09:07 +02:00
140525b7a0 Fix deployment scripts 2019-09-05 09:36:18 +02:00
1a81d46a97 Set version to 6.12.0 2019-09-05 09:31:06 +02:00
4c4c4688a9 Fix src/ path in Makefile 2019-09-04 09:13:09 +02:00
b47ac27ac6 Moved ancillary files to extras/ (fixes #1011) 2019-09-03 15:11:05 +02:00
ed18e77655 Changed as<bool>() to return true for any non-null value (closes #1005) 2019-08-29 08:56:34 +02:00
fcbec6eb6d Use absolute instead of relative includes (fixes #1072) 2019-08-26 11:57:57 +02:00
f5c25823bc Set version to 6.11.5 2019-08-23 08:40:10 +02:00
f00dfd7bfe Added fallbacks strlen_P, strncmp_P, strcmp_P and memcpy_P (fixes #1073) 2019-08-21 15:25:54 +02:00
dcca4214f5 Set version to 6.11.4 2019-08-12 15:10:56 +02:00
1e9cc285bb Added support for basic_string<char, traits, allocator> (closes #1045) 2019-08-12 14:21:45 +02:00
b9c4a0c5f6 Include Arduino.h if ARDUINO is defined (closes #1071) 2019-08-11 13:04:12 +02:00
0d339300f9 Added tests for Flash strings (closes #1070) 2019-08-11 11:39:21 +02:00
63d7d87080 Fixed example JsonConfigFile.ino for ESP8266 2019-08-10 14:17:23 +02:00
2ee655f9ba Fix clang installation on Travis 2019-08-10 12:22:17 +02:00
61a4195ed4 Added measureJson() to the ArduinoJson namespace (fixes #1069) 2019-08-10 11:15:11 +02:00
a6f029ded0 Set version to 6.11.3 2019-07-22 08:59:54 +02:00
b54de58e6b Fixed comparison of JsonVariant with mixed strings (closes #1051) 2019-07-19 12:15:16 +02:00
795e37278f Added operators == and != for MemberProxy 2019-07-19 10:27:03 +02:00
7ce1039d7c Added operators == and != for MemberProxy 2019-07-19 10:23:06 +02:00
aba42faf69 Added operators == and != for JsonDocument 2019-07-19 10:23:06 +02:00
815326d42e Set version to 6.11.2 2019-07-08 08:44:27 +02:00
7d40a541c9 Fix invalid conversion error on Particle Argon (closes #1035) 2019-07-01 09:07:16 +02:00
2507ee2e56 Fixed assignment of JsonDocument to JsonVariant (issue #1023) 2019-06-25 08:56:14 +02:00
a0a451195b Set version to 6.11.1 2019-06-21 08:49:02 +02:00
ce247a5637 Fixed serialized() not working with Flash strings (fixes #1030) 2019-06-21 08:46:32 +02:00
59f9c9747f Add sponsor button on GitHub 2019-06-04 09:14:37 +02:00
fec088e3ed Set version to 6.11.0 2019-05-26 21:11:40 +02:00
4980ee8fb9 Fixed unexpected HTTP/1.0 (closes #944) 2019-05-26 21:07:01 +02:00
2ed77d2cc3 Added support for nullptr (closes #998) 2019-05-26 11:31:51 +02:00
630107ae8a Removed implicit conversion in comparison operators (issue #998) 2019-05-23 21:54:42 +02:00
4eb8074358 Set ARDUINOJSON_ENABLE_NAN and ARDUINOJSON_ENABLE_INFINITY to 0 2019-05-19 17:46:20 +02:00
80a02cd90d Added ARDUINOJSON_ENABLE_INFINITY to enable Infinity in JSON 2019-05-19 15:48:27 +02:00
7427888e05 Added ARDUINOJSON_ENABLE_NAN to enable NaN in JSON (closes #973) 2019-05-18 12:15:36 +02:00
90c1d549a8 Made deserializeJson() more picky about trailing characters (closes #980) 2019-05-16 20:41:07 +02:00
2af003e4e2 Fixed deserializeJson() silently accepting a Stream* (issue #978) 2019-05-09 08:33:09 +02:00
eaf55e174b Fixed invalid result from operator| (closes #981) 2019-05-07 08:12:18 +02:00
0588e578d5 Set version to 6.10.1 2019-04-23 08:47:54 +02:00
12f9aac4ea Fixed "no matching function for call to write(uint8_t)" (closes #972) 2019-04-23 08:46:18 +02:00
81bb3fce97 Fixed build on platformio 2019-04-21 14:35:23 +02:00
6011a2f51a Fixed deserializeJson() not being picky enough (fixes #969) 2019-04-21 14:35:13 +02:00
6071bd07ec Added a link to the FAQ 2019-04-20 12:10:29 +02:00
1c814d3bb6 Fixed warning on Clang 8 2019-03-24 19:39:23 +01:00
9862048a58 Fixed error "attributes are not allowed on a function-definition" 2019-03-24 19:00:23 +01:00
ebc52a5a65 Travis: Added Clang 8 2019-03-24 19:00:23 +01:00
eacad922df Travis: Added Clang 7 2019-03-24 19:00:23 +01:00
d910996613 Travis: Added GCC 8 2019-03-24 19:00:23 +01:00
2fc220fa33 Fixed code samples in the README 2019-03-24 18:21:58 +01:00
8cabda551d Fixed publish.sh not committing appveyor.yml 2019-03-22 22:04:03 +01:00
afd033e9c9 Set version to 6.10.0 2019-03-22 22:01:46 +01:00
6ec5ba521b Added JsonVariant::containsKey() 2019-03-22 21:58:12 +01:00
c8e49a7e4e Added JsonDocument::containsKey() (issue #938) 2019-03-22 08:40:46 +01:00
dee8c8e242 Added BasicJsonDocument to support custom allocator (issue #876) 2019-03-17 21:48:10 +01:00
576543c4b4 Added overflow handling in JsonVariant::as<T>() and JsonVariant::is<T>() 2019-03-06 15:31:37 +01:00
746f2882f7 Removed member call on null 2019-03-05 14:48:33 +01:00
c4cbf9d0bb Don't mark as a "system header" when debugging 2019-03-05 09:19:58 +01:00
49bd51b5f9 Updated version in AppVeyor 2019-03-04 12:21:58 +01:00
e53ae0f9bb Fixed the continuous integration 2019-03-04 12:18:11 +01:00
afdd913a2f Added links to the book page in each example 2019-03-04 12:17:41 +01:00
3df4efd512 Set version to 6.9.1 2019-03-01 18:16:45 +01:00
91dd45c387 Fixed naming conflict with "CAPACITY" (issue #839) 2019-03-01 18:14:23 +01:00
136ee0d576 Marked ArduinoJson.h as a "system header" 2019-03-01 17:31:55 +01:00
1ea8d92cc3 Muted warning "will change in GCC 7.1" (issue #914) 2019-03-01 12:12:47 +01:00
20fcb99830 Fixed warning "conversion may alter value" (issue #914) 2019-03-01 09:15:43 +01:00
f3265d2111 Fixed warning "cast-align" (issue #914) 2019-03-01 09:15:43 +01:00
d6e7709866 Travis: Add g++-arm-linux-gnueabihf 2019-03-01 09:15:43 +01:00
d11019d9e1 Travis: Split build and test scripts 2019-03-01 09:15:43 +01:00
cfd924622e Travis: Define CC and CXX in yaml 2019-03-01 09:15:41 +01:00
27c08b785d Travis: Assume CMake is installed 2019-02-28 17:33:24 +01:00
77f38e4449 Travis: restore build on GCC 4.4 2019-02-28 16:31:08 +01:00
16ddfbc4e0 Fixed strict-aliasing warning in FloatTraits.hpp 2019-02-28 15:37:42 +01:00
8dea900869 Travis: build in Release mode 2019-02-28 15:34:32 +01:00
f342dee2b4 Fixed warning "unused variable" with GCC 4.4 (issue #912) 2019-02-28 15:34:21 +01:00
1d5721f3bd Add an empty cpp file to detect warnings muted by catch.hpp 2019-02-28 15:32:29 +01:00
3170558d6d Added a clear error message for StaticJsonBuffer and DynamicJsonBuffer 2019-02-27 16:38:03 +01:00
3530aa88d6 Updated the examples on wandbox.org 2019-02-26 10:02:52 +01:00
21998890d4 Set version to 6.9.0 2019-02-26 08:43:45 +01:00
c9d6bd76c9 Added JsonDocument::remove() and JsonVariant::remove() 2019-02-25 13:21:10 +01:00
bc2ce178ea Added JsonVariant::clear() 2019-02-25 11:44:22 +01:00
e22e62d184 Added JsonDocument::size() 2019-02-25 11:07:01 +01:00
4181de119c Detect IncompleteInput in false, true, and null 2019-02-18 16:18:11 +01:00
56bf24e1ec Fixed JsonVariant::isNull() not returning true after set((char*)0) 2019-02-18 16:04:51 +01:00
e9b4c6289b Disambiguated the name get() with getElement() and getMember() 2019-02-15 15:53:53 +01:00
7ed92bebd3 Converted JsonArray::copyFrom()/copyTo() to free functions copyArray() 2019-02-15 15:33:04 +01:00
c3f71c1a99 Updated copyright year to 2019 2019-02-15 13:32:04 +01:00
7050ef675d Decode escaped Unicode characters like \u00DE (issue #304, PR #791) 2019-02-15 13:29:30 +01:00
070cd5b6c0 Added more tests of JsonVariant::is<T>() 2019-02-01 11:28:27 +01:00
2c2cc33c94 Updated version in Arduino Library badge 2019-01-30 16:42:21 +01:00
169c83431c Set version to 6.8.0-beta 2019-01-30 16:39:38 +01:00
5f72c68d87 Updated publish script for the "ardu-badge" 2019-01-30 15:23:55 +01:00
b184af6d00 User can now use a JsonString as a key or a value 2019-01-29 17:00:11 +01:00
6f55d1e58f JsonVariant automatically promotes to JsonObject or JsonArray on write 2019-01-29 14:09:09 +01:00
5aea1363cc Merge branch 'master' into 6.x 2019-01-24 21:07:02 +01:00
0685a36f0e Added ArduBadge badge 2019-01-24 20:55:55 +01:00
70739f5cfd Reduced the size of the pretty JSON serializer 2019-01-23 18:19:24 +01:00
933a66a070 Added JsonDocument::operator[] 2019-01-23 11:43:29 +01:00
4167b11434 Create or assign a JsonDocument from a JsonArray/JsonObject/JsonVariant 2019-01-23 10:47:20 +01:00
2a3b51ac3a Fixed uninitialized variant in JsonDocument 2019-01-20 14:35:22 +01:00
e633292df1 Replaced JsonDocument::nestingLimit with a param to deserializeJson() 2019-01-19 14:45:16 +01:00
30b94493bb Added nesting() to JsonArray, JsonDocument, JsonObject, and JsonVariant 2019-01-17 09:55:51 +01:00
c51cc91f92 Added memoryUsage() to JsonArray, JsonObject, and JsonVariant 2019-01-16 09:50:57 +01:00
8b04046321 Import JsonDocument into the ArduinoJson namespace 2019-01-15 12:04:48 +01:00
11bb5e26ff Fixed copying from JsonObjectConst and JsonArrayConst 2019-01-14 11:17:57 +01:00
9ac2ac303c Removed default capacity of DynamicJsonDocument 2019-01-14 10:32:19 +01:00
f0784d3b41 Simplified deserializeJson() and deserializeMsgPack() 2019-01-04 12:33:39 +01:00
3d8ece8c8b Improved syntax highlighting in Arduino IDE 2018-12-14 17:35:40 +01:00
b0fb71f7d8 Import functions in the ArduinoJson namespace to get clearer errors 2018-12-14 17:34:49 +01:00
a5cd1b1693 Set version to 6.7.0-beta 2018-12-07 12:23:02 +01:00
d8a1eec530 Renamed JsonKey to JsonString 2018-12-07 12:08:30 +01:00
e20c47c57b DynamicJsonDocument reallocates memory pool is it's too small 2018-12-07 10:38:58 +01:00
b77b203935 Extracted VariantData and CollectionData classes 2018-12-07 09:16:58 +01:00
1ad97ebf85 Merge branch 'master' into 6.x 2018-12-04 16:52:15 +01:00
ef12c74771 Set version to 5.13.4 2018-12-04 11:36:16 +01:00
0bc03e8071 Removed spurious files in the Particle library 2018-12-04 11:19:22 +01:00
04286f3228 Moved size measurements to github.com/bblanchon/ArduinoJson-size 2018-12-04 10:50:45 +01:00
1d942cdf41 Use singly-linked list to reduce memory usage 2018-12-01 12:05:51 +01:00
aaf0d5c3c5 Renamed and moved internal files 2018-11-30 17:53:54 +01:00
04e8acd844 Store offset between slots to reduce memory usage 2018-11-30 14:28:00 +01:00
8ff48dde73 Moved size measurements to github.com/bblanchon/ArduinoJson-size 2018-11-30 14:27:35 +01:00
41b2e629f7 Increased test coverage 2018-11-30 14:27:35 +01:00
a60162ba76 Removed the indirection via StringSlot 2018-11-30 14:27:35 +01:00
45f4e5ac20 Restored the monotonic allocator 2018-11-30 14:27:33 +01:00
637f7a5bfa Removed template parameter of CharPointerReader and StringMover 2018-11-16 16:24:36 +01:00
399ccec645 Added a CSV showing the evolution of the size of the sample programs 2018-11-16 15:08:53 +01:00
2bd280df80 Removed the automatic expansion of DynamicJsonDocument 2018-11-16 10:26:59 +01:00
c832edbda3 Added script to compile samples on wandbox.org 2018-11-14 18:02:01 +01:00
b8d0041851 Set version to 6.6.0-beta 2018-11-13 18:05:59 +01:00
0a97d4c825 Added DeserializationError::code() to be used in switch statements (closes #846) 2018-11-13 14:31:53 +01:00
5eee947ffe Increased test coverage of MessagePack serialization 2018-11-12 21:36:39 +01:00
720e6548c7 Replacing a value now releases the memory 2018-11-12 18:28:34 +01:00
f375459d53 JsonArray::remove() and JsonObject::remove() now release the memory of strings 2018-11-09 18:20:57 +01:00
e842838a23 fix a spelling error of JsonParserExample.ino 2018-10-25 17:22:23 +02:00
00aa038818 Added executable msgpack_fuzzer 2018-10-19 19:42:15 +02:00
eb78077a0c Travis: Added fuzzing corpus to the cache 2018-10-19 19:40:54 +02:00
d8d939660b JsonArray::remove() and JsonObject::remove() now release the memory of the variant 2018-10-19 19:40:21 +02:00
ae089dcff7 Merged the two StringBuilder classes into one 2018-10-18 17:54:33 +02:00
1a4515c0b9 Removed JsonArray::is<T>(i) and JsonArray::set(i,v)
Removed `JsonObject::is<T>(k)` and `JsonObject::set(k,v)`
Replaced `T JsonArray::get<T>(i)` with `JsonVariant JsonArray::get(i)`
Replaced `T JsonObject::get<T>(k)` with `JsonVariant JsonObject::get(k)`
2018-10-18 14:51:02 +02:00
4eee8e8bdf Reduced code size 2018-10-18 11:15:32 +02:00
9f1421e0a6 Set version to 6.5.0-beta 2018-10-13 13:23:34 +02:00
84f199f0dd Added copy-constructor and copy-assignment-operator for JsonDocument (issue #827) 2018-10-13 13:21:30 +02:00
8230f8fc9b Restored JsonVariantLocal to fix the use-after-free 2018-10-12 20:00:49 +01:00
02d809f3f4 Added Visitable to reduce the number of definitions of operator<< 2018-10-12 17:59:50 +02:00
b0560cbd99 Added JsonArrayConst, JsonObjectConst, and JsonVariantConst 2018-10-12 12:00:27 +02:00
d1003ff6c9 Simplified string handling in JsonObject 2018-10-10 09:18:36 +02:00
b11ad4077b Merge branch 'master' into 6.x 2018-10-09 15:00:49 +02:00
5dc7dc1216 Increased the default capacity of DynamicJsonDocument 2018-10-08 18:32:58 +02:00
0d4a93018b Set version to 5.13.3 2018-10-06 17:50:41 +02:00
3ca40db9f8 Added a coupon code for the book 2018-10-06 17:42:01 +02:00
ce607196d1 Travis: update osx images 2018-10-06 17:24:54 +02:00
0b3af166ae Fixed JsonVariant::is<String>() (closes #763) 2018-10-06 17:21:16 +02:00
39e5660c4a Extracted a base class for JsonDocument 2018-10-04 14:59:07 +02:00
6b985b2d1f Fixed object keys not being duplicated 2018-10-04 11:16:23 +02:00
527dc19794 Allow mixed configuration in compilation units (issue #809) 2018-10-02 16:54:05 +02:00
29e71cbb16 Added implicit conversion from JsonArray and JsonObject to JsonVariant 2018-10-01 12:55:40 +02:00
2d54019f83 Set version to 6.4.0-beta 2018-09-11 16:31:04 +02:00
98c8e8e35a Added a test for issue #808 2018-09-11 16:21:30 +02:00
b106b1ed14 Copy JsonArray and JsonObject, instead of storing pointers (fixes #780) 2018-09-11 16:06:08 +02:00
2998a55f0b Renamed JsonBuffer to MemoryPool 2018-09-03 16:14:21 +02:00
e5c4778ff7 Updated publish script 2018-08-31 17:04:22 +02:00
2ec9569b36 Set version to 6.3.0-beta 2018-08-31 16:57:14 +02:00
58303d0837 Added date in change log 2018-08-31 16:38:42 +02:00
e3639918eb Reduced executable size 2018-08-31 16:29:08 +02:00
6d290bd001 Fixed duplication of char* 2018-08-22 14:37:17 +02:00
7683667b3c Fixed serializeJson(obj[key], dst) (closes #794) 2018-08-21 18:07:41 +02:00
9cbc891816 Implemented reference semantics for JsonVariant 2018-08-21 17:56:16 +02:00
0454bd1ef6 Set version to 6.2.3-beta 2018-07-19 18:28:03 +02:00
f139100b23 Added a script to update the version number 2018-07-19 18:27:44 +02:00
3f666bd5f0 Fixed exception when using Flash strings as object keys (fixes #784) 2018-07-19 17:22:28 +02:00
d53a93e0ae Set version to 6.2.2-beta 2018-07-18 20:21:00 +02:00
2059d610a8 Fixed invalid application of 'sizeof' to incomplete type (closes #783) 2018-07-18 20:19:22 +02:00
9bbfbd0a6a Set version to 6.2.1-beta 2018-07-17 10:27:04 +02:00
6e4f1dc756 Fixed JsonObject not inserting keys of type String (fixes #782) 2018-07-17 10:24:21 +02:00
dc13882624 Update badges to show status of branch 6.x 2018-07-12 11:01:26 +02:00
6bb17d5896 Checked that issue issue #628 is fixed 2018-07-12 10:33:56 +02:00
1a513cbd16 Set version to 6.2.0-beta 2018-07-12 09:10:13 +02:00
87fa87d87b Renamed function RawJson() to serialized() 2018-07-12 09:08:20 +02:00
fa1a40ac6e Fixed JsonVariant::is<int>() that returned true for empty strings 2018-07-05 09:53:11 +02:00
954428e341 Improved float serialization when -fsingle-precision-constant is used 2018-07-05 09:48:57 +02:00
765752261c Improved float serialization when -fsingle-precision-constant is used 2018-07-04 12:07:03 +02:00
037f90aada Disabled lazy number deserialization (fixes #772) 2018-07-04 12:02:58 +02:00
1397bec066 Set version to 6.1.0-beta 2018-07-02 09:54:35 +02:00
b105e6f7c4 Return JsonArray and JsonObject by value (closes #309) 2018-07-02 09:35:21 +02:00
4fe2b1100e Set version to 6.0.1-beta 2018-06-11 12:24:33 +02:00
c3403ed72d Fixed conflicts with isnan() and isinf() macros (fixes #752) 2018-06-11 12:21:50 +02:00
393f352b70 Minor changes in the examples 2018-06-07 11:21:54 +02:00
e86eb0cfdf Set version to 6.0.0-beta 2018-06-07 10:50:10 +02:00
a9a730fd74 Added MessagePack fuzzing 2018-06-07 10:36:57 +02:00
4ff6809bc5 Merge branch 'master' into 6.x 2018-06-07 09:32:55 +02:00
7b229e4c38 Added fuzzing to travis 2018-06-06 11:20:49 +02:00
9ac9b533b6 Added clang 3.9, 4.0, 5.0 and 6.0 to travis 2018-06-05 20:55:53 +02:00
f53fc3e06f Added MessagePack in README 2018-06-04 17:48:10 +02:00
0139354780 Merge branch 'master' into 6.x 2018-06-04 17:46:34 +02:00
fc2e3a4ab3 Added serializeMsgPack() and measureMsgPack() (closes #358) 2018-05-29 08:31:39 +02:00
58cb793c96 Reorganized polyfills 2018-05-17 13:46:23 +02:00
4592f23260 Merged MsgPackError and JsonError into DeserializationError.
Return NotSupported if the JSON input contains "\u".
2018-05-15 18:23:09 +02:00
ccb54136a2 Added support for non zero-terminated strings (fixes #704) 2018-05-14 17:12:59 +02:00
4c9c047ddf Made nestingLimit a member of the document 2018-04-18 21:42:30 +02:00
1feb92679d Added StaticJsonDocument and DynamicJsonDocument.
Removed StaticJsonArray and DynamicJsonArray.
Removed StaticJsonObject and DynamicJsonObject.
Removed StaticJsonVariant and DynamicJsonVariant.
2018-04-17 21:27:45 +02:00
a13b9e8bdc Added example MsgPackParser.ino (issue #358) 2018-04-10 17:55:51 +02:00
cb723840d9 Added deserializeMsgPack() (issue #358) 2018-04-10 17:43:27 +02:00
923d3e8a84 Removed friend relationship between JsonVariant and JsonSerializer 2018-03-23 09:20:50 +01:00
0d1623edef Clear the JsonObject or JsonArray in deserializeJson() 2018-03-18 14:50:52 +01:00
cf149940ed Moved JsonBuffer to Memory/ 2018-03-15 16:51:07 +01:00
ef55a6ba7c Removed all deprecated features 2018-03-15 16:50:39 +01:00
e3e4aa89ad Merge branch 'master' into 6.x
# Conflicts:
#	CHANGELOG.md
#	src/ArduinoJson/Deserialization/JsonParser.hpp
#	src/ArduinoJson/Deserialization/JsonParserImpl.hpp
#	test/JsonBuffer/nestingLimit.cpp
2018-03-14 14:46:53 +01:00
b2a8085651 Added JsonError 2018-03-09 16:58:01 +01:00
83d73c93f7 Replaced printTo() with serializeJson()
* Added `serializeJson()` and `serializeJsonPretty()`
* Added `measureJson()` and `measureJsonPretty()`
* Removed `printTo()` and `prettyPrintTo()`
* Removed `measureLength()` and `measurePrettyLength()`
2018-03-01 09:24:58 +01:00
7a2a64803a Don't use JsonBuffer to create or parse objects and arrays.
* Added DynamicJsonArray and StaticJsonArray
* Added DynamicJsonObject and StaticJsonObject
* Added DynamicJsonVariant and StaticJsonVariant
* Added deserializeJson()
* Removed JsonBuffer::parseArray(), parseObject() and parse()
* Removed JsonBuffer::createArray() and createObject()
2018-02-26 16:05:16 +01:00
baf5adcf33 Set version to 6.0.0 2018-02-26 16:00:44 +01:00
614 changed files with 50587 additions and 23924 deletions

View File

@ -1,5 +1,12 @@
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
BasedOnStyle: Google
Standard: Cpp03
Standard: c++11
AllowShortFunctionsOnASingleLine: Empty
IncludeBlocks: Preserve
IndentPPDirectives: AfterHash
DerivePointerAlignment: false
# Always break after if to get accurate coverage
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

View File

@ -0,0 +1,18 @@
{
"name": "Clang 10",
"image": "conanio/clang10",
"runArgs": [
"--name=ArduinoJson-clang10"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "Clang 5",
"image": "conanio/clang50",
"runArgs": [
"--name=ArduinoJson-clang5"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "Clang 6",
"image": "conanio/clang60",
"runArgs": [
"--name=ArduinoJson-clang6"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "Clang 7",
"image": "conanio/clang7",
"runArgs": [
"--name=ArduinoJson-clang7"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "Clang 8",
"image": "conanio/clang8",
"runArgs": [
"--name=ArduinoJson-clang8"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "Clang 9",
"image": "conanio/clang9",
"runArgs": [
"--name=ArduinoJson-clang9"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 10",
"image": "conanio/gcc10",
"runArgs": [
"--name=ArduinoJson-gcc10"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 11",
"image": "conanio/gcc11",
"runArgs": [
"--name=ArduinoJson-gcc11"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 5",
"image": "conanio/gcc5",
"runArgs": [
"--name=ArduinoJson-gcc5"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 6",
"image": "conanio/gcc6",
"runArgs": [
"--name=ArduinoJson-gcc6"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 7",
"image": "conanio/gcc7",
"runArgs": [
"--name=ArduinoJson-gcc7"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 8",
"image": "conanio/gcc8",
"runArgs": [
"--name=ArduinoJson-gcc8"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "GCC 9",
"image": "conanio/gcc9",
"runArgs": [
"--name=ArduinoJson-gcc9"
],
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.generator": "Unix Makefiles",
"cmake.buildDirectory": "/tmp/build"
}
}
}
}

3
.gitattributes vendored
View File

@ -1 +1,2 @@
*.sh text eol=lf
* text=auto
*.sh text eol=lf

4
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,4 @@
github: bblanchon
custom:
- https://arduinojson.org/book/
- https://donate.benoitblanchon.fr/

View File

@ -1,14 +0,0 @@
<!--
Before opening an issue, please read the FAQ:
https://arduinojson.org/faq/
Please provide all the relevant information:
* good title
* short description of the problem
* target platform
* compiler model and version
* MVCE (https://stackoverflow.com/help/mcve)
* compiler output
Good questions get fast answers!
-->

54
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,54 @@
---
name: 🐛 Bug report
about: Report a bug in ArduinoJson
title: ''
labels: 'bug'
assignees: ''
---
<!-- ⚠️ IMPORTANT ⚠️
Before opening a bug report, please use the ArduinoJson Troubleshooter as it may find a solution to your issue; if not, please include the Troubleshooter's report in the description.
-->
**Describe the bug**
A clear and concise description of what the bug is.
**Troubleshooter report**
Here is the report generated by the [ArduinoJson Troubleshooter](https://arduinojson.org/v6/troubleshooter/):
[Paste the report here]
**Environment**
Here is the environment that I used:
* Microcontroller: [e.g. ESP8266]
* Core/runtime: [e.g. ESP8266 core for Arduino v3.0.2]
* IDE: [e.g. Arduino IDE 1.8.16]
**Reproduction**
Here is a small snippet that reproduces the issue.
```c++
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, "{\"hello\":\"world\"}");
[insert repro code here]
```
**Compiler output**
If relevant, include the complete compiler output (i.e. not just the line that contains the error.)
**Program output**
If relevant, include the repro program output.
Expected output:
```
[insert expected output here]
```
Actual output:
```
[insert actual output here]
```

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: 👨‍🏫 ArduinoJson Assistant
url: https://arduinojson.org/v6/assistant/
about: An online tool that computes memory requirements and generates scaffolding code for your project.
- name: 👨‍⚕️ ArduinoJson Troubleshooter
url: https://arduinojson.org/v6/troubleshooter/
about: An online tool that helps you diagnose the most common issues with ArduinoJson.

View File

@ -0,0 +1,19 @@
---
name: 💡 Feature request
about: Suggest an idea for ArduinoJson
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

51
.github/ISSUE_TEMPLATE/help.md vendored Normal file
View File

@ -0,0 +1,51 @@
---
name: 😭 Help!
about: Ask for help
title: ''
labels: 'question'
assignees: ''
---
<!-- ⚠️ IMPORTANT ⚠️
Before asking for help, please use the ArduinoJson Troubleshooter as it may find a solution to your issue; if not, please include the Troubleshooter's report in the description.
-->
**Describe the issue**
A clear and concise description of what you're trying to do.
You don't need to explain every aspect of your project: focus on the problem you're having.
**Troubleshooter report**
Here is the report generated by the [ArduinoJson Troubleshooter](https://arduinojson.org/v6/troubleshooter/):
[Paste the report here]
**Environment**
Here is the environment that I'm using':
* Microconroller: [e.g. ESP8266]
* Core/runtime: [e.g. ESP8266 core for Arduino v3.0.2]
* IDE: [e.g. Arduino IDE 1.8.16]
**Reproduction**
Here is a small snippet that demonstrate the problem.
```c++
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, "{\"hello\":\"world\"}");
// insert code here
```
**Program output**
If relevant, include the program output.
Expected output:
```
[insert expected output here]
```
Actual output:
```
[insert actual output here]
```

589
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,589 @@
name: Continuous Integration
on: [push, pull_request]
jobs:
lint:
name: Lint
runs-on: ubuntu-20.04
steps:
- name: Install
run: sudo apt-get install -y clang-format
- name: Checkout
uses: actions/checkout@v3
- name: Symlinks
run: find * -type l -printf "::error::%p is a symlink. This is forbidden by the Arduino Library Specification." -exec false {} +
- name: Clang-format
run: |
find src/ extras/ -name '*.[ch]pp' | xargs clang-format -i --verbose --style=file
git diff --exit-code
- name: Check URLs
run: |
grep -hREo "(http|https)://[a-zA-Z0-9./?=_%:-]*" src/ | sort -u | while read -r URL
do
STATUS=$(curl -s -o /dev/null -I -w "%{http_code}" "$URL")
[ "$STATUS" -ge 400 ] && echo "::warning title=HTTP $STATUS::$URL returned $STATUS"
done || true
gcc:
name: GCC
needs: lint
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- gcc: "5"
- gcc: "6"
- gcc: "7"
cxxflags: -fsanitize=leak -fno-sanitize-recover=all
- gcc: "8"
cxxflags: -fsanitize=undefined -fno-sanitize-recover=all
- gcc: "9"
cxxflags: -fsanitize=address -fno-sanitize-recover=all
- gcc: "10"
cxxflags: -funsigned-char # Issue #1715
- gcc: "11"
steps:
- name: Install
run: |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ bionic main universe'
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ focal main universe'
sudo apt-get update
sudo apt-get install -y gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake -DCMAKE_BUILD_TYPE=Debug .
env:
CC: gcc-${{ matrix.gcc }}
CXX: g++-${{ matrix.gcc }}
CXXFLAGS: ${{ matrix.cxxflags }}
- name: Build
run: cmake --build .
- name: Test
run: |
echo "## CTest output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
ctest --output-on-failure -C Debug . | tee -a $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
env:
UBSAN_OPTIONS: print_stacktrace=1
clang:
name: Clang
needs: lint
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
include:
- clang: "3.8"
cxxflags: "-stdlib=libc++"
- clang: "3.9"
cxxflags: "-stdlib=libc++"
- clang: "4.0"
cxxflags: "-stdlib=libc++"
- clang: "5.0"
- clang: "6.0"
- clang: "7"
- clang: "8"
cxxflags: -fsanitize=leak -fno-sanitize-recover=all
- clang: "9"
cxxflags: -fsanitize=undefined -fno-sanitize-recover=all
- clang: "10"
cxxflags: -fsanitize=address -fno-sanitize-recover=all
steps:
- name: Install
run: |
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ xenial main'
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ xenial universe'
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ bionic main'
sudo add-apt-repository -yn 'deb http://archive.ubuntu.com/ubuntu/ bionic universe'
sudo apt-get update
sudo apt-get install -y clang-${{ matrix.clang }}
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake -DCMAKE_BUILD_TYPE=Debug .
env:
CC: clang-${{ matrix.clang }}
CXX: clang++-${{ matrix.clang }}
CXXFLAGS: >-
${{ matrix.cxxflags }}
${{ contains(matrix.cxxflags, 'libc++') && '-I/usr/lib/llvm-10/include/c++/v1/' || '' }}
- name: Build
run: cmake --build .
- name: Test
run: |
echo "## CTest output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
ctest --output-on-failure -C Debug . | tee -a $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
env:
UBSAN_OPTIONS: print_stacktrace=1
conf_test:
name: Test configuration on Linux
needs: [gcc, clang]
runs-on: ubuntu-20.04
steps:
- name: Install
run: |
sudo apt-get update
sudo apt-get install -y g++-multilib gcc-avr avr-libc
- name: Checkout
uses: actions/checkout@v3
- name: AVR
run: avr-g++ -std=c++11 -Isrc extras/conf_test/avr.cpp
- name: GCC 32-bit
run: g++ -std=c++11 -m32 -Isrc extras/conf_test/x86.cpp
- name: GCC 64-bit
run: g++ -std=c++11 -m64 -Isrc extras/conf_test/x64.cpp
- name: Clang 32-bit
run: clang++ -std=c++11 -m32 -Isrc extras/conf_test/x86.cpp
- name: Clang 64-bit
run: clang++ -std=c++11 -m64 -Isrc extras/conf_test/x64.cpp
conf_test_windows:
name: Test configuration on Windows
runs-on: windows-2019
needs: [gcc, clang]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: 32-bit
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
cl /Isrc extras/conf_test/x86.cpp
shell: cmd
- name: 64-bit
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cl /Isrc extras/conf_test/x64.cpp
shell: cmd
xcode:
name: XCode
needs: clang
runs-on: macos-11
strategy:
fail-fast: false
matrix:
include:
- xcode: "11.7"
- xcode: "12.4"
- xcode: "13.2.1"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Select XCode version
run: sudo xcode-select --switch /Applications/Xcode_${{ matrix.xcode }}.app
- name: Configure
run: cmake -DCMAKE_BUILD_TYPE=Debug .
- name: Build
run: cmake --build .
- name: Test
run: ctest --output-on-failure -C Debug .
# DISABLED: Running on AppVeyor instead because it supports older versions of the compiler
# msvc:
# name: Visual Studio
# strategy:
# fail-fast: false
# matrix:
# include:
# - os: windows-2016
# - os: windows-2019
# runs-on: ${{ matrix.os }}
# steps:
# - name: Checkout
# uses: actions/checkout@v3
# - name: Configure
# run: cmake -DCMAKE_BUILD_TYPE=Debug .
# - name: Build
# run: cmake --build .
# - name: Test
# run: ctest --output-on-failure -C Debug .
arduino:
name: Arduino
needs: gcc
strategy:
fail-fast: false
matrix:
include:
- core: arduino:avr
board: arduino:avr:uno
- core: arduino:samd
board: arduino:samd:mkr1000
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install arduino-cli
run: curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=/usr/local/bin sh
- name: Install core
run: arduino-cli core install ${{ matrix.core }}
- name: Install libraries
run: arduino-cli lib install SD Ethernet
- name: Build JsonConfigFile
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonConfigFile/JsonConfigFile.ino"
- name: Build JsonFilterExample
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonFilterExample/JsonFilterExample.ino"
- name: Build JsonGeneratorExample
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonGeneratorExample/JsonGeneratorExample.ino"
- name: Build JsonHttpClient
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonHttpClient/JsonHttpClient.ino"
- name: Build JsonParserExample
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonParserExample/JsonParserExample.ino"
- name: Build JsonServer
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonServer/JsonServer.ino"
- name: Build JsonUdpBeacon
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/JsonUdpBeacon/JsonUdpBeacon.ino"
- name: Build MsgPackParser
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/MsgPackParser/MsgPackParser.ino"
- name: Build ProgmemExample
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/ProgmemExample/ProgmemExample.ino"
- name: Build StringExample
run: arduino-cli compile --library . --warnings all -b ${{ matrix.board }} "examples/StringExample/StringExample.ino"
platformio:
name: PlatformIO
needs: gcc
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- platform: atmelavr
board: leonardo
libraries:
- SD
- Ethernet
conf_test: avr
- platform: espressif8266
board: huzzah
conf_test: esp8266
- platform: espressif32
board: esp32dev
libraries:
- Ethernet
conf_test: esp8266
- platform: atmelsam
board: mkr1000USB
libraries:
- SD
- Ethernet
conf_test: esp8266
- platform: teensy
board: teensy31
conf_test: esp8266
- platform: ststm32
board: adafruit_feather_f405
libraries:
- SD
- Ethernet
conf_test: esp8266
- platform: nordicnrf52
board: adafruit_feather_nrf52840
libraries:
- SD
- Ethernet
conf_test: esp8266
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up cache for pip
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install PlatformIO
run: pip install platformio
- name: Install adafruit-nrfutil
if: ${{ matrix.platform == 'nordicnrf52' }}
run: pip install adafruit-nrfutil
- name: Include Adafruit_TinyUSB.h # https://github.com/adafruit/Adafruit_nRF52_Arduino/issues/653
if: ${{ matrix.platform == 'nordicnrf52' }}
run: find examples/ -name '*.ino' -exec sed -i 's/\(#include <ArduinoJson.h>\)/\1\n#include <Adafruit_TinyUSB.h>/' {} +
- name: Set up cache for platformio
uses: actions/cache@v3
with:
path: ~/.platformio
key: ${{ runner.os }}-platformio-${{ matrix.platform }}
- name: Install platform "${{ matrix.platform }}"
run: platformio platform install ${{ matrix.platform }}
- name: Install libraries
if: ${{ matrix.libraries }}
run: platformio lib install arduino-libraries/${{ join(matrix.libraries, ' arduino-libraries/') }}
- name: Test configuration
run: platformio ci "extras/conf_test/${{ matrix.conf_test }}.cpp" -l '.' -b ${{ matrix.board }}
if: ${{ matrix.conf_test }}
- name: Build JsonConfigFile
run: platformio ci "examples/JsonConfigFile/JsonConfigFile.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonFilterExample
run: platformio ci "examples/JsonFilterExample/JsonFilterExample.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonGeneratorExample
run: platformio ci "examples/JsonGeneratorExample/JsonGeneratorExample.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonHttpClient
run: platformio ci "examples/JsonHttpClient/JsonHttpClient.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonParserExample
run: platformio ci "examples/JsonParserExample/JsonParserExample.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonServer
if: ${{ matrix.platform != 'espressif32' }}
run: platformio ci "examples/JsonServer/JsonServer.ino" -l '.' -b ${{ matrix.board }}
- name: Build JsonUdpBeacon
run: platformio ci "examples/JsonUdpBeacon/JsonUdpBeacon.ino" -l '.' -b ${{ matrix.board }}
- name: Build MsgPackParser
run: platformio ci "examples/MsgPackParser/MsgPackParser.ino" -l '.' -b ${{ matrix.board }}
- name: Build ProgmemExample
run: platformio ci "examples/ProgmemExample/ProgmemExample.ino" -l '.' -b ${{ matrix.board }}
- name: Build StringExample
run: platformio ci "examples/StringExample/StringExample.ino" -l '.' -b ${{ matrix.board }}
- name: PlatformIO prune
if: ${{ always() }}
run: platformio system prune -f
particle:
name: Particle
needs: gcc
runs-on: ubuntu-latest
if: github.event_name == 'push'
strategy:
fail-fast: false
matrix:
include:
- board: argon
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Particle CLI
run: sudo npm install -g particle-cli
- name: Login to Particle
run: particle login -t "${{ secrets.PARTICLE_TOKEN }}"
- name: Compile
run: extras/ci/particle.sh ${{ matrix.board }}
arm:
name: GCC for ARM processor
needs: gcc
runs-on: ubuntu-20.04
steps:
- name: Install
run: |
sudo apt-get update
sudo apt-get install -y g++-arm-linux-gnueabihf
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake .
env:
CC: arm-linux-gnueabihf-gcc
CXX: arm-linux-gnueabihf-g++
- name: Build
run: cmake --build .
coverage:
needs: gcc
name: Coverage
runs-on: ubuntu-20.04
steps:
- name: Install
run: sudo apt-get install -y lcov ninja-build
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake -G Ninja -DCOVERAGE=true .
- name: Build
run: ninja
- name: Test
run: ctest -LE 'WillFail|Fuzzing' -T test
- name: lcov --capture
run: lcov --capture --no-external --directory . --output-file coverage.info
- name: lcov --remove
run: lcov --remove coverage.info "$(pwd)/extras/*" --output-file coverage_filtered.info
- name: genhtml
run: mkdir coverage && genhtml coverage_filtered.info -o coverage -t ArduinoJson
- name: Upload HTML report
uses: actions/upload-artifact@v3
with:
name: Coverage report
path: coverage
- name: Upload to Coveralls
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-lcov: coverage_filtered.info
valgrind:
needs: gcc
name: Valgrind
runs-on: ubuntu-20.04
steps:
- name: Install
run: |
sudo apt-get update
sudo apt-get install -y valgrind ninja-build
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake -G Ninja -D MEMORYCHECK_COMMAND_OPTIONS="--error-exitcode=1 --leak-check=full" .
- name: Build
run: ninja
- name: Memcheck
run: ctest -LE WillFail -T memcheck
id: memcheck
- name: MemoryChecker.*.log
run: cat Testing/Temporary/MemoryChecker.*.log
if: failure()
clang-tidy:
needs: clang
name: Clang-Tidy
runs-on: ubuntu-20.04
steps:
- name: Install
run: sudo apt-get install -y clang-tidy cmake ninja-build
- name: Checkout
uses: actions/checkout@v3
- name: Configure
run: cmake -G Ninja -DCMAKE_CXX_CLANG_TIDY="clang-tidy-10;--warnings-as-errors=*" -DCMAKE_BUILD_TYPE=Debug .
env:
CC: clang-10
CXX: clang++-10
- name: Check
run: cmake --build . -- -k 0
amalgamate-h:
needs: gcc
name: Amalgamate ArduinoJson.h
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Amalgamate
id: amalgamate
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=${GITHUB_SHA::7}
fi
INPUT=src/ArduinoJson.h
OUTPUT=ArduinoJson-$VERSION.h
extras/scripts/build-single-header.sh "$INPUT" "$OUTPUT"
echo "filename=${OUTPUT}" >> $GITHUB_OUTPUT
- name: Smoke test
run: |
g++ -x c++ - <<END
#include "${{ steps.amalgamate.outputs.filename }}"
int main() {
StaticJsonDocument<300> doc;
deserializeJson(doc, "{}");
}
END
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: Single headers
path: ${{ steps.amalgamate.outputs.filename }}
amalgamate-hpp:
needs: gcc
name: Amalgamate ArduinoJson.hpp
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Amalgamate
id: amalgamate
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=${GITHUB_SHA::7}
fi
INPUT=src/ArduinoJson.hpp
OUTPUT=ArduinoJson-$VERSION.hpp
extras/scripts/build-single-header.sh "$INPUT" "$OUTPUT"
echo "filename=${OUTPUT}" >> $GITHUB_OUTPUT
- name: Smoke test
run: |
g++ -x c++ - <<END
#include "${{ steps.amalgamate.outputs.filename }}"
int main() {
ArduinoJson::StaticJsonDocument<300> doc;
deserializeJson(doc, "{}");
}
END
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: Single headers
path: ${{ steps.amalgamate.outputs.filename }}
esp-idf:
needs: gcc
name: ESP-IDF
runs-on: ubuntu-latest
steps:
- name: Setup cache
uses: actions/cache@v3
with:
path: ~/.espressif
key: ${{ runner.os }}-esp-idf
- name: Checkout ArduinoJson
uses: actions/checkout@v3
- name: Checkout ESP-IDF
uses: actions/checkout@v3
with:
repository: espressif/esp-idf
path: esp-idf
submodules: true
- name: Install ESP-IDF
run: ./esp-idf/install.sh
- name: Add component
# NOTE: we cannot commit the symlink because the Arduino Library Specification forbids it.
run: |
mkdir -p extras/ci/espidf/components
ln -s $PWD extras/ci/espidf/components/ArduinoJson
- name: Build example
run: |
source esp-idf/export.sh
cd extras/ci/espidf
idf.py build
codeql:
name: CodeQL
runs-on: ubuntu-20.04
needs: gcc
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: cpp
- name: Build
run: |
cmake -DCMAKE_BUILD_TYPE=Debug .
cmake --build .
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:cpp"

14
.github/workflows/lock.yml vendored Normal file
View File

@ -0,0 +1,14 @@
name: Lock Threads
on:
schedule:
- cron: '0 0 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v4
with:
github-token: ${{ github.token }}
issue-inactive-days: 30

78
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,78 @@
name: Release
on:
push:
tags:
- v*.*.*
jobs:
release:
name: Create release
runs-on: ubuntu-20.04
steps:
- name: Set variables
id: init
run: |
echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Checkout
uses: actions/checkout@v3
- name: Write release body
id: body
run: |
FILENAME=RELEASE.md
extras/scripts/get-release-body.sh ${{ steps.init.outputs.tag }} CHANGELOG.md | tee $FILENAME
echo "filename=$FILENAME" >> $GITHUB_OUTPUT
- name: Amalgamate ArduinoJson.h
id: amalgamate_h
run: |
FILENAME=ArduinoJson-${{ steps.init.outputs.tag }}.h
extras/scripts/build-single-header.sh src/ArduinoJson.h "$FILENAME"
echo "filename=$FILENAME" >> $GITHUB_OUTPUT
- name: Amalgamate ArduinoJson.hpp
id: amalgamate_hpp
run: |
FILENAME=ArduinoJson-${{ steps.init.outputs.tag }}.hpp
extras/scripts/build-single-header.sh src/ArduinoJson.hpp "$FILENAME"
echo "filename=$FILENAME" >> $GITHUB_OUTPUT
- name: Create Arduino package
id: arduino
run: |
FILENAME=ArduinoJson-${{ steps.init.outputs.tag }}.zip
extras/scripts/build-arduino-package.sh . "$FILENAME"
echo "filename=$FILENAME" >> $GITHUB_OUTPUT
- name: Create release
uses: ncipollo/release-action@v1
with:
bodyFile: ${{ steps.body.outputs.filename }}
name: ArduinoJson ${{ steps.init.outputs.version }}
artifacts: ${{ steps.amalgamate_h.outputs.filename }},${{ steps.amalgamate_hpp.outputs.filename }},${{ steps.arduino.outputs.filename }}
token: ${{ secrets.GITHUB_TOKEN }}
idf:
name: IDF Component Registry
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Upload component to the component registry
uses: espressif/upload-components-ci-action@v1
with:
name: ArduinoJson
namespace: bblanchon
api_token: ${{ secrets.IDF_COMPONENT_API_TOKEN }}
particle:
name: Particle
runs-on: ubuntu-latest
steps:
- name: Install
run: npm install -g particle-cli
- name: Checkout
uses: actions/checkout@v3
- name: Login
run: particle login --token ${{ secrets.PARTICLE_TOKEN }}
timeout-minutes: 1
- name: Publish
run: bash -eux extras/scripts/publish-particle-library.sh
timeout-minutes: 5

15
.gitignore vendored
View File

@ -6,6 +6,15 @@
/sftp-config.json
.tags
.tags_sorted_by_file
/fuzzing/*_fuzzer
/fuzzing/*_fuzzer.options
/fuzzing/*_fuzzer_seed_corpus.zip
/extras/fuzzing/*_fuzzer
/extras/fuzzing/*_fuzzer.options
/extras/fuzzing/*_fuzzer_seed_corpus.zip
.vs/
/out/
# Used by CI for Particle
/src/*.ino
/project.properties
# Used by IDF
/dist/

View File

@ -1,6 +1,4 @@
.devcontainer/
.github/
examples/
fuzzing/
scripts/
test/
third-party/
extras/

1
.prettierignore Normal file
View File

@ -0,0 +1 @@
*.md

View File

@ -1,96 +0,0 @@
sudo: false
language: cpp
matrix:
include:
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.4']
env: SCRIPT=cmake GCC=4.4
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.6']
env: SCRIPT=cmake GCC=4.6
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.7']
env: SCRIPT=cmake GCC=4.7
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.8']
env: SCRIPT=cmake GCC=4.8 SANITIZE=address
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.9']
env: SCRIPT=cmake GCC=4.9 SANITIZE=leak
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-5']
env: SCRIPT=cmake GCC=5
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-6']
env: SCRIPT=cmake GCC=6
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-7']
env: SCRIPT=cmake GCC=7
- compiler: clang
env: SCRIPT=cmake
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.5']
packages: ['clang-3.5']
env: SCRIPT=cmake CLANG=3.5 SANITIZE=address
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.6']
packages: ['clang-3.6']
env: SCRIPT=cmake CLANG=3.6 SANITIZE=leak
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.7']
packages: ['clang-3.7']
env: SCRIPT=cmake CLANG=3.7
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.8']
packages: ['clang-3.8']
env: SCRIPT=cmake CLANG=3.8 SANITIZE=undefined
- compiler: gcc
env: SCRIPT=coverage
- os: osx
osx_image: xcode6.4
compiler: clang
env: SCRIPT=cmake
- os: osx
osx_image: xcode7.3
compiler: clang
env: SCRIPT=cmake SANITIZE=address
- env: SCRIPT=arduino VERSION=1.6.7 BOARD=arduino:avr:uno
- env: SCRIPT=arduino VERSION=1.8.2 BOARD=arduino:avr:uno
- env: SCRIPT=platformio BOARD=uno
- env: SCRIPT=platformio BOARD=esp01
cache:
directories:
- "~/.platformio"
script: scripts/travis/$SCRIPT.sh

17
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,17 @@
{
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"git.inputValidationLength": 80,
"git.inputValidationSubjectLength": 72,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"search.exclude": {
"/extras/tests/catch/*": true
},
"C_Cpp.default.includePath": [
"/src"
],
"[cmake]": {
"editor.detectIndentation": false,
"editor.insertSpaces": false,
}
}

View File

@ -1,5 +1,5 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
#include "src/ArduinoJson.h"

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,191 @@
# ArduinoJson - arduinojson.org
# Copyright Benoit Blanchon 2014-2018
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
cmake_minimum_required(VERSION 3.0)
project(ArduinoJson)
cmake_minimum_required(VERSION 3.15)
enable_testing()
if(ESP_PLATFORM)
# Build ArduinoJson as an ESP-IDF component
if(${COVERAGE})
set(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
set(headers
src/ArduinoJson/Array/ElementProxy.hpp
src/ArduinoJson/Array/JsonArrayConst.hpp
src/ArduinoJson/Array/JsonArray.hpp
src/ArduinoJson/Array/JsonArrayImpl.hpp
src/ArduinoJson/Array/JsonArrayIterator.hpp
src/ArduinoJson/Array/Utilities.hpp
src/ArduinoJson/Collection/CollectionData.hpp
src/ArduinoJson/Collection/CollectionImpl.hpp
src/ArduinoJson/compatibility.hpp
src/ArduinoJson/Configuration.hpp
src/ArduinoJson/Deserialization/DeserializationError.hpp
src/ArduinoJson/Deserialization/DeserializationOptions.hpp
src/ArduinoJson/Deserialization/deserialize.hpp
src/ArduinoJson/Deserialization/Filter.hpp
src/ArduinoJson/Deserialization/NestingLimit.hpp
src/ArduinoJson/Deserialization/Reader.hpp
src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp
src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp
src/ArduinoJson/Deserialization/Readers/FlashReader.hpp
src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp
src/ArduinoJson/Deserialization/Readers/RamReader.hpp
src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp
src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
src/ArduinoJson/Document/BasicJsonDocument.hpp
src/ArduinoJson/Document/DynamicJsonDocument.hpp
src/ArduinoJson/Document/JsonDocument.hpp
src/ArduinoJson/Document/StaticJsonDocument.hpp
src/ArduinoJson.hpp
src/ArduinoJson/Json/EscapeSequence.hpp
src/ArduinoJson/Json/JsonDeserializer.hpp
src/ArduinoJson/Json/JsonSerializer.hpp
src/ArduinoJson/Json/Latch.hpp
src/ArduinoJson/Json/PrettyJsonSerializer.hpp
src/ArduinoJson/Json/TextFormatter.hpp
src/ArduinoJson/Json/Utf16.hpp
src/ArduinoJson/Json/Utf8.hpp
src/ArduinoJson/Memory/Alignment.hpp
src/ArduinoJson/Memory/MemoryPool.hpp
src/ArduinoJson/Misc/SerializedValue.hpp
src/ArduinoJson/MsgPack/endianess.hpp
src/ArduinoJson/MsgPack/ieee754.hpp
src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp
src/ArduinoJson/MsgPack/MsgPackSerializer.hpp
src/ArduinoJson/Namespace.hpp
src/ArduinoJson/Numbers/arithmeticCompare.hpp
src/ArduinoJson/Numbers/convertNumber.hpp
src/ArduinoJson/Numbers/FloatParts.hpp
src/ArduinoJson/Numbers/FloatTraits.hpp
src/ArduinoJson/Numbers/JsonFloat.hpp
src/ArduinoJson/Numbers/JsonInteger.hpp
src/ArduinoJson/Numbers/parseNumber.hpp
src/ArduinoJson/Object/JsonObjectConst.hpp
src/ArduinoJson/Object/JsonObject.hpp
src/ArduinoJson/Object/JsonObjectImpl.hpp
src/ArduinoJson/Object/JsonObjectIterator.hpp
src/ArduinoJson/Object/JsonPair.hpp
src/ArduinoJson/Object/MemberProxy.hpp
src/ArduinoJson/Polyfills/alias_cast.hpp
src/ArduinoJson/Polyfills/assert.hpp
src/ArduinoJson/Polyfills/attributes.hpp
src/ArduinoJson/Polyfills/ctype.hpp
src/ArduinoJson/Polyfills/integer.hpp
src/ArduinoJson/Polyfills/limits.hpp
src/ArduinoJson/Polyfills/math.hpp
src/ArduinoJson/Polyfills/mpl/max.hpp
src/ArduinoJson/Polyfills/pgmspace_generic.hpp
src/ArduinoJson/Polyfills/pgmspace.hpp
src/ArduinoJson/Polyfills/preprocessor.hpp
src/ArduinoJson/Polyfills/type_traits/conditional.hpp
src/ArduinoJson/Polyfills/type_traits/declval.hpp
src/ArduinoJson/Polyfills/type_traits/enable_if.hpp
src/ArduinoJson/Polyfills/type_traits.hpp
src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp
src/ArduinoJson/Polyfills/type_traits/is_array.hpp
src/ArduinoJson/Polyfills/type_traits/is_base_of.hpp
src/ArduinoJson/Polyfills/type_traits/is_class.hpp
src/ArduinoJson/Polyfills/type_traits/is_const.hpp
src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp
src/ArduinoJson/Polyfills/type_traits/is_enum.hpp
src/ArduinoJson/Polyfills/type_traits/is_floating_point.hpp
src/ArduinoJson/Polyfills/type_traits/is_integral.hpp
src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp
src/ArduinoJson/Polyfills/type_traits/is_same.hpp
src/ArduinoJson/Polyfills/type_traits/is_signed.hpp
src/ArduinoJson/Polyfills/type_traits/is_unsigned.hpp
src/ArduinoJson/Polyfills/type_traits/make_unsigned.hpp
src/ArduinoJson/Polyfills/type_traits/make_void.hpp
src/ArduinoJson/Polyfills/type_traits/remove_const.hpp
src/ArduinoJson/Polyfills/type_traits/remove_cv.hpp
src/ArduinoJson/Polyfills/type_traits/remove_reference.hpp
src/ArduinoJson/Polyfills/type_traits/type_identity.hpp
src/ArduinoJson/Polyfills/utility.hpp
src/ArduinoJson/Serialization/CountingDecorator.hpp
src/ArduinoJson/Serialization/measure.hpp
src/ArduinoJson/Serialization/serialize.hpp
src/ArduinoJson/Serialization/Writer.hpp
src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp
src/ArduinoJson/Serialization/Writers/DummyWriter.hpp
src/ArduinoJson/Serialization/Writers/PrintWriter.hpp
src/ArduinoJson/Serialization/Writers/StaticStringWriter.hpp
src/ArduinoJson/Serialization/Writers/StdStreamWriter.hpp
src/ArduinoJson/Serialization/Writers/StdStringWriter.hpp
src/ArduinoJson/Strings/Adapters/FlashString.hpp
src/ArduinoJson/Strings/Adapters/JsonString.hpp
src/ArduinoJson/Strings/Adapters/RamString.hpp
src/ArduinoJson/Strings/Adapters/StringObject.hpp
src/ArduinoJson/Strings/IsString.hpp
src/ArduinoJson/Strings/JsonString.hpp
src/ArduinoJson/Strings/StoragePolicy.hpp
src/ArduinoJson/Strings/StringAdapter.hpp
src/ArduinoJson/Strings/StringAdapters.hpp
src/ArduinoJson/Strings/StringTraits.hpp
src/ArduinoJson/StringStorage/StringCopier.hpp
src/ArduinoJson/StringStorage/StringMover.hpp
src/ArduinoJson/StringStorage/StringStorage.hpp
src/ArduinoJson/Variant/Converter.hpp
src/ArduinoJson/Variant/ConverterImpl.hpp
src/ArduinoJson/Variant/JsonVariantConst.hpp
src/ArduinoJson/Variant/JsonVariant.hpp
src/ArduinoJson/Variant/SlotFunctions.hpp
src/ArduinoJson/Variant/VariantAttorney.hpp
src/ArduinoJson/Variant/VariantCompare.hpp
src/ArduinoJson/Variant/VariantContent.hpp
src/ArduinoJson/Variant/VariantData.hpp
src/ArduinoJson/Variant/VariantFunctions.hpp
src/ArduinoJson/Variant/VariantImpl.hpp
src/ArduinoJson/Variant/VariantOperators.hpp
src/ArduinoJson/Variant/VariantRefBase.hpp
src/ArduinoJson/Variant/VariantSlot.hpp
src/ArduinoJson/Variant/VariantTag.hpp
src/ArduinoJson/Variant/VariantTo.hpp
src/ArduinoJson/Variant/Visitor.hpp
src/ArduinoJson/version.hpp
)
set(sources
)
set(dependencies
)
idf_component_register(
INCLUDE_DIRS
src
SRCS
${headers}
${sources}
REQUIRES
${dependencies}
)
set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 23)
target_compile_options(${COMPONENT_TARGET}
PUBLIC
-DARDUINOJSON_USE_LONG_LONG
-DARDUINOJSON_ENABLE_STD_STRING=1
-DARDUINOJSON_ENABLE_STRING_VIEW=1
-DARDUINOJSON_ENABLE_ARDUINO_STRING=0
-DARDUINOJSON_ENABLE_ARDUINO_STREAM=0
-DARDUINOJSON_ENABLE_ARDUINO_PRINT=0
-DARDUINOJSON_ENABLE_PROGMEM=0
-DARDUINOJSON_NO_ARDUINO=1
)
return()
endif()
include_directories(${CMAKE_CURRENT_LIST_DIR}/src)
add_subdirectory(third-party/catch)
add_subdirectory(test)
project(ArduinoJson VERSION 6.21.2)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
include(CTest)
endif()
add_subdirectory(src)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
include(extras/CompileOptions.cmake)
add_subdirectory(extras/tests)
add_subdirectory(extras/fuzzing)
endif()

View File

@ -6,6 +6,5 @@ You can submit changes via GitHub Pull Requests.
Please:
1. Unit test every change in behavior
1. Update the test suite for any change of behavior
2. Use clang-format in "file" mode to format the code
3. Consider using the Continuous Integration (Travis and AppVeyor)

View File

@ -1,10 +1,10 @@
The MIT License (MIT)
---------------------
Copyright © 2014-2018 Benoit BLANCHON
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The MIT License (MIT)
---------------------
Copyright © 2014-2023, Benoit BLANCHON
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

195
README.md
View File

@ -1,54 +1,106 @@
![ArduinoJson](banner.svg)
<p align="center">
<a href="https://arduinojson.org/"><img alt="ArduinoJson" src="https://arduinojson.org/images/logo.svg" width="200" /></a>
</p>
---
[![Build status](https://ci.appveyor.com/api/projects/status/m7s53wav1l0abssg/branch/master?svg=true)](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/master) [![Build Status](https://travis-ci.org/bblanchon/ArduinoJson.svg?branch=master)](https://travis-ci.org/bblanchon/ArduinoJson) [![Coverage Status](https://img.shields.io/coveralls/bblanchon/ArduinoJson.svg)](https://coveralls.io/r/bblanchon/ArduinoJson?branch=master) [![Star this project](http://githubbadges.com/star.svg?user=bblanchon&repo=ArduinoJson&style=flat&color=fff&background=007ec6)](https://github.com/bblanchon/ArduinoJson)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bblanchon/ArduinoJson/ci.yml?branch=6.x&logo=github)](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A6.x)
[![Continuous Integration](https://ci.appveyor.com/api/projects/status/m7s53wav1l0abssg/branch/6.x?svg=true)](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x)
[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/arduinojson.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson)
[![Coveralls branch](https://img.shields.io/coveralls/github/bblanchon/ArduinoJson/6.x?logo=coveralls)](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x)
[![Arduino Library Manager](https://img.shields.io/static/v1?label=Arduino&message=v6.21.2&logo=arduino&logoColor=white&color=blue)](https://www.ardu-badge.com/ArduinoJson/6.21.2)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/bblanchon/library/ArduinoJson.svg?version=6.21.2)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.21.2)
[![ESP IDF](https://img.shields.io/static/v1?label=ESP+IDF&message=v6.21.2&logo=cpu&logoColor=white&color=blue)](https://components.espressif.com/components/bblanchon/arduinojson)
[![GitHub stars](https://img.shields.io/github/stars/bblanchon/ArduinoJson?style=flat&logo=github&color=orange)](https://github.com/bblanchon/ArduinoJson/stargazers)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/bblanchon?logo=github&color=orange)](https://github.com/sponsors/bblanchon)
ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
## Features
* JSON decoding (comments are supported)
* JSON encoding (with optional indentation)
* Elegant API, easy to use
* Fixed memory allocation (zero malloc)
* No data duplication (zero copy)
* Portable (written in C++98, can be used in any C++ project)
* Self-contained (no external dependency)
* Small footprint
* Input and output streams
* [100% code coverage](https://coveralls.io/github/bblanchon/ArduinoJson)
* [Header-only library](https://en.wikipedia.org/wiki/Header-only)
* [MIT License](https://en.wikipedia.org/wiki/MIT_License)
* [Comprehensive documentation](https://arduinojson.org?utm_source=github&utm_medium=readme)
## Compatibility
ArduinoJson works on the following hardware:
* <img src="https://www.arduino.cc/favicon.ico" height="16" width="16"> Arduino boards: [Uno](https://www.arduino.cc/en/Main/ArduinoBoardUno), [Due](https://www.arduino.cc/en/Main/ArduinoBoardDue), [Mini](https://www.arduino.cc/en/Main/ArduinoBoardMini), [Micro](https://www.arduino.cc/en/Main/ArduinoBoardMicro), [Yun](https://www.arduino.cc/en/Main/ArduinoBoardYun)...
* <img src="http://espressif.com/sites/all/themes/espressif/favicon.ico" height="16" width="16"> Espressif chips: [ESP8266](https://en.wikipedia.org/wiki/ESP8266), [ESP32](https://en.wikipedia.org/wiki/ESP32)
* <img src="https://www.wemos.cc/themes/martin-materialize-parallax/assets/favicon.ico" height="16" width="16"> WeMos boards: [D1](https://wiki.wemos.cc/products:d1:d1), [D1 mini](https://wiki.wemos.cc/products:d1:d1_mini), ...
* <img src="http://redbearlab.com/favicon.ico" height="16" width="16"> RedBearLab boards: [BLE Nano](http://redbearlab.com/blenano/), [BLE Mini](http://redbearlab.com/blemini/), [WiFi Micro](https://redbear.cc/product/wifi/wifi-micro.html), [LOLIN32](https://wiki.wemos.cc/products:lolin32:lolin32)...
* <img src="https://www.pjrc.com/favicon.ico" height="16" width="16"> [Teensy](https://www.pjrc.com/teensy/) boards
* <img src="https://software.intel.com/sites/all/themes/zero/favicon.ico" height="16" width="16"> Intel boards: Edison, Galileo...
* <img src="https://www-assets.particle.io/images/favicon.png" height="16" width="16"> Particle boards: [Photon](https://www.particle.io/products/hardware/photon-wifi-dev-kit), [Electron](https://www.particle.io/products/hardware/electron-cellular-dev-kit)...
* <img src="http://www.ti.com/favicon.ico" height="16" width="16"> Texas Instruments boards: [MSP430](http://www.ti.com/microcontrollers/msp430-ultra-low-power-mcus/overview/overview.html)...
ArduinoJson compiles with zero warning on the following compilers, IDEs, and platforms:
* <img src="https://www.arduino.cc/favicon.ico" height="16" width="16"> [Arduino IDE](https://www.arduino.cc/en/Main/Software)
* <img src="http://cdn.platformio.org/favicon.ico" height="16" width="16"> [PlatformIO](http://platformio.org/)
* <img src="http://energia.nu/img/favicon.ico" height="16" width="16"> [Energia](http://energia.nu/)
* <img src="http://www.visualmicro.com/pics/arduino-visual-studio-ld.png" height="16" width="16"> [Visual Micro](http://www.visualmicro.com/)
* <img src="http://www.atmel.com/Images/favicon.ico" height="16" width="16"> [Atmel Studio](http://www.atmel.com/microsite/atmel-studio/)
* <img src="https://www.iar.com/favicon.ico" height="16" width="16"> [IAR Embedded Workbench](https://www.iar.com/iar-embedded-workbench/)
* <img src="http://www.st.com/etc/clientlibs/st-site/media/app/images/favicon.png" height="16" width="16"> [Atollic TrueSTUDIO](https://atollic.com/truestudio/)
* <img src="http://www.keil.com/favicon.ico" height="16" width="16"> [Keil uVision](http://www.keil.com/)
* <img src="http://www.microchip.com/favicon.ico" height="16" width="16"> [MPLAB X IDE](http://www.microchip.com/mplab/mplab-x-ide)
* <img src="https://gcc.gnu.org/favicon.ico" height="16" width="16"> [GCC](https://gcc.gnu.org/)
* <img src="https://clang.llvm.org/favicon.ico" height="16" width="16"> [Clang](https://clang.llvm.org/)
* <img src="https://www.visualstudio.com/favicon.ico" height="16" width="16"> [Visual Studio](https://www.visualstudio.com/)
* [JSON deserialization](https://arduinojson.org/v6/api/json/deserializejson/)
* [Optionally decodes UTF-16 escape sequences to UTF-8](https://arduinojson.org/v6/api/config/decode_unicode/)
* [Optionally stores links to the input buffer (zero-copy)](https://arduinojson.org/v6/api/json/deserializejson/)
* [Optionally supports comments in the input](https://arduinojson.org/v6/api/config/enable_comments/)
* [Optionally filters the input to keep only desired values](https://arduinojson.org/v6/api/json/deserializejson/#filtering)
* Supports single quotes as a string delimiter
* Compatible with [NDJSON](http://ndjson.org/) and [JSON Lines](https://jsonlines.org/)
* [JSON serialization](https://arduinojson.org/v6/api/json/serializejson/)
* [Can write to a buffer or a stream](https://arduinojson.org/v6/api/json/serializejson/)
* [Optionally indents the document (prettified JSON)](https://arduinojson.org/v6/api/json/serializejsonpretty/)
* [MessagePack serialization](https://arduinojson.org/v6/api/msgpack/serializemsgpack/)
* [MessagePack deserialization](https://arduinojson.org/v6/api/msgpack/deserializemsgpack/)
* Efficient
* [Twice smaller than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/)
* [Almost 10% faster than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/)
* [Consumes roughly 10% less RAM than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/)
* [Fixed memory allocation, no heap fragmentation](https://arduinojson.org/v6/api/jsondocument/)
* [Optionally works without heap memory (zero malloc)](https://arduinojson.org/v6/api/staticjsondocument/)
* [Deduplicates strings](https://arduinojson.org/news/2020/08/01/version-6-16-0/)
* Versatile
* Supports [custom allocators (to use external RAM chip, for example)](https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/)
* Supports [`String`](https://arduinojson.org/v6/api/config/enable_arduino_string/), [`std::string`](https://arduinojson.org/v6/api/config/enable_std_string/), and [`std::string_view`](https://arduinojson.org/v6/api/config/enable_string_view/)
* Supports [`Stream`](https://arduinojson.org/v6/api/config/enable_arduino_stream/) and [`std::istream`/`std::ostream`](https://arduinojson.org/v6/api/config/enable_std_stream/)
* Supports [Flash strings](https://arduinojson.org/v6/api/config/enable_progmem/)
* Supports [custom readers](https://arduinojson.org/v6/api/json/deserializejson/#custom-reader) and [custom writers](https://arduinojson.org/v6/api/json/serializejson/#custom-writer)
* Supports [custom converters](https://arduinojson.org/news/2021/05/04/version-6-18-0/)
* Portable
* Usable on any C++ project (not limited to Arduino)
* Compatible with C++11, C++14 and C++17
* Support for C++98/C++03 available on [ArduinoJson 6.20.x](https://github.com/bblanchon/ArduinoJson/tree/6.20.x)
* Zero warnings with `-Wall -Wextra -pedantic` and `/W4`
* [Header-only library](https://en.wikipedia.org/wiki/Header-only)
* Works with virtually any board
* Arduino boards: [Uno](https://amzn.to/38aL2ik), [Due](https://amzn.to/36YkWi2), [Micro](https://amzn.to/35WkdwG), [Nano](https://amzn.to/2QTvwRX), [Mega](https://amzn.to/36XWhuf), [Yun](https://amzn.to/30odURc), [Leonardo](https://amzn.to/36XWjlR)...
* Espressif chips: [ESP8266](https://amzn.to/36YluV8), [ESP32](https://amzn.to/2G4pRCB)
* Lolin (WeMos) boards: [D1 mini](https://amzn.to/2QUpz7q), [D1 Mini Pro](https://amzn.to/36UsGSs)...
* Teensy boards: [4.0](https://amzn.to/30ljXGq), [3.2](https://amzn.to/2FT0EuC), [2.0](https://amzn.to/2QXUMXj)
* Particle boards: [Argon](https://amzn.to/2FQHa9X), [Boron](https://amzn.to/36WgLUd), [Electron](https://amzn.to/30vEc4k), [Photon](https://amzn.to/387F9Cd)...
* Texas Instruments boards: [MSP430](https://amzn.to/30nJWgg)...
* Soft cores: [Nios II](https://en.wikipedia.org/wiki/Nios_II)...
* Tested on all major development environments
* [Arduino IDE](https://www.arduino.cc/en/Main/Software)
* [Atmel Studio](http://www.atmel.com/microsite/atmel-studio/)
* [Atollic TrueSTUDIO](https://atollic.com/truestudio/)
* [Energia](http://energia.nu/)
* [IAR Embedded Workbench](https://www.iar.com/iar-embedded-workbench/)
* [Keil uVision](http://www.keil.com/)
* [MPLAB X IDE](http://www.microchip.com/mplab/mplab-x-ide)
* [Particle](https://www.particle.io/)
* [PlatformIO](http://platformio.org/)
* [Sloeber plugin for Eclipse](https://eclipse.baeyens.it/)
* [Visual Micro](http://www.visualmicro.com/)
* [Visual Studio](https://www.visualstudio.com/)
* [Even works with online compilers like wandbox.org](https://wandbox.org/permlink/RlZSKy17DjJ6HcdN)
* [CMake friendly](https://arduinojson.org/v6/how-to/use-arduinojson-with-cmake/)
* Well designed
* [Elegant API](http://arduinojson.org/v6/example/)
* [Thread-safe](https://en.wikipedia.org/wiki/Thread_safety)
* Self-contained (no external dependency)
* `const` friendly
* [`for` friendly](https://arduinojson.org/v6/api/jsonobject/begin_end/)
* [TMP friendly](https://en.wikipedia.org/wiki/Template_metaprogramming)
* Handles [integer overflows](https://arduinojson.org/v6/api/jsonvariant/as/#integer-overflows)
* Well tested
* [Unit test coverage close to 100%](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x)
* Continuously tested on
* [Visual Studio 2017, 2019, 2022](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x)
* [GCC 5, 6, 7, 8, 9, 10, 11](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22)
* [Clang 3.8, 3.9, 4.0, 5.0, 6.0, 7, 8, 9, 10](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22)
* [Continuously fuzzed with Google OSS Fuzz](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson)
* Passes all default checks of [clang-tidy](https://releases.llvm.org/10.0.0/tools/clang/tools/extra/docs/clang-tidy/)
* Well documented
* [Tutorials](https://arduinojson.org/v6/doc/deserialization/)
* [Examples](https://arduinojson.org/v6/example/)
* [How-tos](https://arduinojson.org/v6/example/)
* [FAQ](https://arduinojson.org/v6/faq/)
* [Troubleshooter](https://arduinojson.org/v6/troubleshooter/)
* [Book](https://arduinojson.org/book/)
* [Changelog](CHANGELOG.md)
* Vibrant user community
* Most popular of all Arduino libraries on [GitHub](https://github.com/search?o=desc&q=arduino+library&s=stars&type=Repositories)
* [Used in hundreds of projects](https://www.hackster.io/search?i=projects&q=arduinojson)
* [Responsive support](https://github.com/bblanchon/ArduinoJson/issues?q=is%3Aissue+is%3Aclosed)
## Quickstart
@ -59,52 +111,51 @@ Here is a program that parses a JSON document with ArduinoJson.
```c++
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
StaticJsonBuffer<200> jsonBuffer;
DynamicJsonDocument doc(1024);
deserializeJson(doc, json);
JsonObject& root = jsonBuffer.parseObject(json);
const char* sensor = root["sensor"];
long time = root["time"];
double latitude = root["data"][0];
double longitude = root["data"][1];
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
```
See the [tutorial on arduinojson.org](https://arduinojson.org/doc/decoding/?utm_source=github&utm_medium=readme)
See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/deserialization/)
### Serialization
Here is a program that generates a JSON document with ArduinoJson:
```c++
StaticJsonBuffer<200> jsonBuffer;
DynamicJsonDocument doc(1024);
JsonObject& root = jsonBuffer.createObject();
root["sensor"] = "gps";
root["time"] = 1351824120;
doc["sensor"] = "gps";
doc["time"] = 1351824120;
doc["data"][0] = 48.756080;
doc["data"][1] = 2.302038;
JsonArray& data = root.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
root.printTo(Serial);
serializeJson(doc, Serial);
// This prints:
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
```
See the [tutorial on arduinojson.org](https://arduinojson.org/doc/encoding/?utm_source=github&utm_medium=readme)
See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/serialization/)
## Documentation
## Sponsors
The documentation is available on [arduinojson.org](https://arduinojson.org/?utm_source=github&utm_medium=readme), here are some shortcuts:
ArduinoJson is thankful to its sponsors. Please give them a visit; they deserve it!
* The [Examples](https://arduinojson.org/example/?utm_source=github&utm_medium=readme) show how to use the library in various situations.
* The [API Reference](https://arduinojson.org/api/?utm_source=github&utm_medium=readme) contains the description of each class and function.
* The [FAQ](https://arduinojson.org/faq/?utm_source=github&utm_medium=readme) has the answer to virtually every question.
* The [ArduinoJson Assistant](https://arduinojson.org/assistant/?utm_source=github&utm_medium=readme) writes programs for you!
<p>
<a href="https://www.programmingelectronics.com/" rel="sponsored">
<img src="https://arduinojson.org/images/2021/10/programmingeleactronicsacademy.png" alt="Programming Electronics Academy" width="200">
</a>
</p>
<p>
<a href="https://github.com/1technophile" rel="sponsored">
<img alt="1technophile" src="https://avatars.githubusercontent.com/u/12672732?s=40&v=4">
</a>
</p>
---
If you run a commercial project that embeds ArduinoJson, think about [sponsoring the library's development](https://github.com/sponsors/bblanchon): it ensures the code that your products rely on stays actively maintained. It can also give your project some exposure to the makers' community.
Do you like this library? Please [star this project on GitHub](https://github.com/bblanchon/ArduinoJson/stargazers)!
What? You don't like it but you *love* it?
We don't take donations anymore, but [we sell a book](https://arduinojson.org/book/?utm_source=github&utm_medium=readme), so you can help and learn at the same time!
If you are an individual user and want to support the development (or give a sign of appreciation), consider purchasing the book [Mastering ArduinoJson](https://arduinojson.org/book/)&nbsp;❤, or simply [cast a star](https://github.com/bblanchon/ArduinoJson/stargazers)&nbsp;⭐.

View File

@ -1,20 +1,28 @@
version: 5.13.2.{build}
version: 6.21.2.{build}
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: Visual Studio 15 2017
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMAKE_GENERATOR: Visual Studio 14 2015
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
CMAKE_GENERATOR: Visual Studio 12 2013
- CMAKE_GENERATOR: Visual Studio 11 2012
- CMAKE_GENERATOR: Visual Studio 10 2010
- CMAKE_GENERATOR: MinGW Makefiles
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
CMAKE_GENERATOR: Visual Studio 17 2022
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: Visual Studio 16 2019
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: Visual Studio 15 2017
- CMAKE_GENERATOR: Ninja
MINGW32: i686-6.3.0-posix-dwarf-rt_v5-rev1 # MinGW-w64 6.3.0 i686
- CMAKE_GENERATOR: Ninja
MINGW64: x86_64-6.3.0-posix-seh-rt_v5-rev1 # MinGW-w64 6.3.0 x86_64
- CMAKE_GENERATOR: Ninja
MINGW64: x86_64-7.3.0-posix-seh-rt_v5-rev0 # MinGW-w64 7.3.0 x86_64
- CMAKE_GENERATOR: Ninja
MINGW64: x86_64-8.1.0-posix-seh-rt_v6-rev0 # MinGW-w64 8.1.0 x86_64
configuration: Debug
before_build:
- set PATH=C:\MinGW\bin;%PATH:C:\Program Files\Git\usr\bin;=% # Workaround for CMake not wanting sh.exe on PATH for MinGW
- cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% -G "%CMAKE_GENERATOR%" .
- set PATH=%PATH:C:\Program Files\Git\usr\bin;=% # Workaround for CMake not wanting sh.exe on PATH for MinGW
- if defined MINGW set PATH=C:\%MINGW%\bin;%PATH%
- if defined MINGW32 set PATH=C:\mingw-w64\%MINGW32%\mingw32\bin;%PATH%
- if defined MINGW64 set PATH=C:\mingw-w64\%MINGW64%\mingw64\bin;%PATH%
- cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% -G "%CMAKE_GENERATOR%" .
build_script:
- cmake --build . --config %CONFIGURATION%
- cmake --build . --config %CONFIGURATION%
test_script:
- ctest --output-on-failure .
- ctest -C %CONFIGURATION% --output-on-failure .

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 32 KiB

1
component.mk Normal file
View File

@ -0,0 +1 @@
COMPONENT_ADD_INCLUDEDIRS := src

View File

@ -1,5 +1,5 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to store your project configuration in a file.
@ -10,12 +10,25 @@
// "hostname": "examples.com",
// "port": 2731
// }
//
// To run this program, you need an SD card connected to the SPI bus as follows:
// * MOSI <-> pin 11
// * MISO <-> pin 12
// * CLK <-> pin 13
// * CS <-> pin 4
//
// https://arduinojson.org/v6/example/config/
#include <ArduinoJson.h>
#include <SD.h>
#include <SPI.h>
// Configuration that we'll store on disk
// Our configuration structure.
//
// Never use a JsonDocument to store the configuration!
// A JsonDocument is *not* a permanent storage; it's only a temporary storage
// used during the serialization phase. See:
// https://arduinojson.org/v6/faq/why-must-i-create-a-separate-config-object/
struct Config {
char hostname[64];
int port;
@ -29,24 +42,23 @@ void loadConfiguration(const char *filename, Config &config) {
// Open file for reading
File file = SD.open(filename);
// Allocate the memory pool on the stack.
// Don't forget to change the capacity to match your JSON document.
// Use arduinojson.org/assistant to compute the capacity.
StaticJsonBuffer<512> jsonBuffer;
// Allocate a temporary JsonDocument
// Don't forget to change the capacity to match your requirements.
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<512> doc;
// Parse the root object
JsonObject &root = jsonBuffer.parseObject(file);
if (!root.success())
// Deserialize the JSON document
DeserializationError error = deserializeJson(doc, file);
if (error)
Serial.println(F("Failed to read file, using default configuration"));
// Copy values from the JsonObject to the Config
config.port = root["port"] | 2731;
strlcpy(config.hostname, // <- destination
root["hostname"] | "example.com", // <- source
sizeof(config.hostname)); // <- destination's capacity
// Copy values from the JsonDocument to the Config
config.port = doc["port"] | 2731;
strlcpy(config.hostname, // <- destination
doc["hostname"] | "example.com", // <- source
sizeof(config.hostname)); // <- destination's capacity
// Close the file (File's destructor doesn't close the file)
// Close the file (Curiously, File's destructor doesn't close the file)
file.close();
}
@ -62,24 +74,21 @@ void saveConfiguration(const char *filename, const Config &config) {
return;
}
// Allocate the memory pool on the stack
// Don't forget to change the capacity to match your JSON document.
// Use https://arduinojson.org/assistant/ to compute the capacity.
StaticJsonBuffer<256> jsonBuffer;
// Allocate a temporary JsonDocument
// Don't forget to change the capacity to match your requirements.
// Use https://arduinojson.org/assistant to compute the capacity.
StaticJsonDocument<256> doc;
// Parse the root object
JsonObject &root = jsonBuffer.createObject();
// Set the values
root["hostname"] = config.hostname;
root["port"] = config.port;
// Set the values in the document
doc["hostname"] = config.hostname;
doc["port"] = config.port;
// Serialize JSON to file
if (root.printTo(file) == 0) {
if (serializeJson(doc, file) == 0) {
Serial.println(F("Failed to write to file"));
}
// Close the file (File's destructor doesn't close the file)
// Close the file
file.close();
}
@ -98,7 +107,7 @@ void printFile(const char *filename) {
}
Serial.println();
// Close the file (File's destructor doesn't close the file)
// Close the file
file.close();
}
@ -108,7 +117,8 @@ void setup() {
while (!Serial) continue;
// Initialize SD library
while (!SD.begin()) {
const int chipSelect = 4;
while (!SD.begin(chipSelect)) {
Serial.println(F("Failed to initialize SD library"));
delay(1000);
}
@ -130,15 +140,21 @@ void loop() {
// not used in this example
}
// Performance issue?
// ------------------
//
// File is an unbuffered stream, which is not optimal for ArduinoJson.
// See: https://arduinojson.org/v6/how-to/improve-speed/
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// serialization or deserialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a case study of a project that has
// a complex configuration with nested members.
// Contrary to this example, the project in the book uses the SPIFFS filesystem.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -0,0 +1,63 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to use DeserializationOption::Filter
//
// https://arduinojson.org/v6/example/filter/
#include <ArduinoJson.h>
void setup() {
// Initialize serial port
Serial.begin(9600);
while (!Serial) continue;
// The huge input: an extract from OpenWeatherMap response
auto input_json = F(
"{\"cod\":\"200\",\"message\":0,\"list\":[{\"dt\":1581498000,\"main\":{"
"\"temp\":3.23,\"feels_like\":-3.63,\"temp_min\":3.23,\"temp_max\":4.62,"
"\"pressure\":1014,\"sea_level\":1014,\"grnd_level\":1010,\"humidity\":"
"58,\"temp_kf\":-1.39},\"weather\":[{\"id\":800,\"main\":\"Clear\","
"\"description\":\"clear "
"sky\",\"icon\":\"01d\"}],\"clouds\":{\"all\":0},\"wind\":{\"speed\":6."
"19,\"deg\":266},\"sys\":{\"pod\":\"d\"},\"dt_txt\":\"2020-02-12 "
"09:00:00\"},{\"dt\":1581508800,\"main\":{\"temp\":6.09,\"feels_like\":-"
"1.07,\"temp_min\":6.09,\"temp_max\":7.13,\"pressure\":1015,\"sea_"
"level\":1015,\"grnd_level\":1011,\"humidity\":48,\"temp_kf\":-1.04},"
"\"weather\":[{\"id\":800,\"main\":\"Clear\",\"description\":\"clear "
"sky\",\"icon\":\"01d\"}],\"clouds\":{\"all\":9},\"wind\":{\"speed\":6."
"64,\"deg\":268},\"sys\":{\"pod\":\"d\"},\"dt_txt\":\"2020-02-12 "
"12:00:00\"}],\"city\":{\"id\":2643743,\"name\":\"London\",\"coord\":{"
"\"lat\":51.5085,\"lon\":-0.1257},\"country\":\"GB\",\"population\":"
"1000000,\"timezone\":0,\"sunrise\":1581492085,\"sunset\":1581527294}}");
// The filter: it contains "true" for each value we want to keep
StaticJsonDocument<200> filter;
filter["list"][0]["dt"] = true;
filter["list"][0]["main"]["temp"] = true;
// Deserialize the document
StaticJsonDocument<400> doc;
deserializeJson(doc, input_json, DeserializationOption::Filter(filter));
// Print the result
serializeJsonPretty(doc, Serial);
}
void loop() {
// not used in this example
}
// See also
// --------
//
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// deserialization problem.
//
// The book "Mastering ArduinoJson" contains a tutorial on deserialization.
// It begins with a simple example, like the one above, and then adds more
// features like deserializing directly from a file or an HTTP request.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,8 +1,10 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to generate a JSON document with ArduinoJson.
//
// https://arduinojson.org/v6/example/generator/
#include <ArduinoJson.h>
@ -11,48 +13,42 @@ void setup() {
Serial.begin(9600);
while (!Serial) continue;
// Memory pool for JSON object tree.
// Allocate the JSON document
//
// Inside the brackets, 200 is the size of the pool in bytes.
// Don't forget to change this value to match your JSON document.
// Use arduinojson.org/assistant to compute the capacity.
StaticJsonBuffer<200> jsonBuffer;
// Inside the brackets, 200 is the RAM allocated to this document.
// Don't forget to change this value to match your requirement.
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<200> doc;
// StaticJsonBuffer allocates memory on the stack, it can be
// replaced by DynamicJsonBuffer which allocates in the heap.
// StaticJsonObject allocates memory on the stack, it can be
// replaced by DynamicJsonDocument which allocates in the heap.
//
// DynamicJsonBuffer jsonBuffer(200);
// DynamicJsonDocument doc(200);
// Create the root of the object tree.
// Add values in the document
//
// It's a reference to the JsonObject, the actual bytes are inside the
// JsonBuffer with all the other nodes of the object tree.
// Memory is freed when jsonBuffer goes out of scope.
JsonObject& root = jsonBuffer.createObject();
doc["sensor"] = "gps";
doc["time"] = 1351824120;
// Add values in the object
// Add an array.
//
// Most of the time, you can rely on the implicit casts.
// In other case, you can do root.set<long>("time", 1351824120);
root["sensor"] = "gps";
root["time"] = 1351824120;
// Add a nested array.
//
// It's also possible to create the array separately and add it to the
// JsonObject but it's less efficient.
JsonArray& data = root.createNestedArray("data");
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
root.printTo(Serial);
// This prints:
// Generate the minified JSON and send it to the Serial port.
//
serializeJson(doc, Serial);
// The above line prints:
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
// Start a new line
Serial.println();
root.prettyPrintTo(Serial);
// This prints:
// Generate the prettified JSON and send it to the Serial port.
//
serializeJsonPretty(doc, Serial);
// The above line prints:
// {
// "sensor": "gps",
// "time": 1351824120,
@ -70,12 +66,12 @@ void loop() {
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// serialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a tutorial on serialization.
// It begins with a simple example, like the one above, and then adds more
// features like serializing directly to a file or an HTTP request.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,11 +1,11 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to parse a JSON document in an HTTP response.
// It uses the Ethernet library, but can be easily adapted for Wifi.
//
// It performs a GET resquest on arduinojson.org/example.json
// It performs a GET resquest on https://arduinojson.org/example.json
// Here is the expected response:
// {
// "sensor": "gps",
@ -15,6 +15,8 @@
// 2.302038
// ]
// }
//
// https://arduinojson.org/v6/example/http-client/
#include <ArduinoJson.h>
#include <Ethernet.h>
@ -51,15 +53,18 @@ void setup() {
client.println(F("Connection: close"));
if (client.println() == 0) {
Serial.println(F("Failed to send request"));
client.stop();
return;
}
// Check HTTP status
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
// It should be "HTTP/1.0 200 OK" or "HTTP/1.1 200 OK"
if (strcmp(status + 9, "200 OK") != 0) {
Serial.print(F("Unexpected response: "));
Serial.println(status);
client.stop();
return;
}
@ -67,27 +72,30 @@ void setup() {
char endOfHeaders[] = "\r\n\r\n";
if (!client.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
client.stop();
return;
}
// Allocate JsonBuffer
// Use arduinojson.org/assistant to compute the capacity.
// Allocate the JSON document
// Use https://arduinojson.org/v6/assistant to compute the capacity.
const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
DynamicJsonBuffer jsonBuffer(capacity);
DynamicJsonDocument doc(capacity);
// Parse JSON object
JsonObject& root = jsonBuffer.parseObject(client);
if (!root.success()) {
Serial.println(F("Parsing failed!"));
DeserializationError error = deserializeJson(doc, client);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
client.stop();
return;
}
// Extract values
Serial.println(F("Response:"));
Serial.println(root["sensor"].as<char*>());
Serial.println(root["time"].as<char*>());
Serial.println(root["data"][0].as<char*>());
Serial.println(root["data"][1].as<char*>());
Serial.println(doc["sensor"].as<const char*>());
Serial.println(doc["time"].as<long>());
Serial.println(doc["data"][0].as<float>(), 6);
Serial.println(doc["data"][1].as<float>(), 6);
// Disconnect
client.stop();
@ -97,16 +105,22 @@ void loop() {
// not used in this example
}
// Performance issue?
// ------------------
//
// EthernetClient is an unbuffered stream, which is not optimal for ArduinoJson.
// See: https://arduinojson.org/v6/how-to/improve-speed/
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// serialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a tutorial on deserialization
// showing how to parse the response from Yahoo Weather. In the last chapter,
// showing how to parse the response from GitHub's API. In the last chapter,
// it shows how to parse the huge documents from OpenWeatherMap
// and Weather Underground.
// Please check it out at: https://arduinojson.org/book/
// and Reddit.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,8 +1,10 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to deserialize a JSON document with ArduinoJson.
//
// https://arduinojson.org/v6/example/parser/
#include <ArduinoJson.h>
@ -11,47 +13,47 @@ void setup() {
Serial.begin(9600);
while (!Serial) continue;
// Memory pool for JSON object tree.
// Allocate the JSON document
//
// Inside the brackets, 200 is the size of the pool in bytes.
// Inside the brackets, 200 is the capacity of the memory pool in bytes.
// Don't forget to change this value to match your JSON document.
// Use arduinojson.org/assistant to compute the capacity.
StaticJsonBuffer<200> jsonBuffer;
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<200> doc;
// StaticJsonBuffer allocates memory on the stack, it can be
// replaced by DynamicJsonBuffer which allocates in the heap.
// StaticJsonDocument<N> allocates memory on the stack, it can be
// replaced by DynamicJsonDocument which allocates in the heap.
//
// DynamicJsonBuffer jsonBuffer(200);
// DynamicJsonDocument doc(200);
// JSON input string.
//
// It's better to use a char[] as shown here.
// If you use a const char* or a String, ArduinoJson will
// have to make a copy of the input in the JsonBuffer.
// Using a char[], as shown here, enables the "zero-copy" mode. This mode uses
// the minimal amount of memory because the JsonDocument stores pointers to
// the input buffer.
// If you use another type of input, ArduinoJson must copy the strings from
// the input to the JsonDocument, so you need to increase the capacity of the
// JsonDocument.
char json[] =
"{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
// Root of the object tree.
//
// It's a reference to the JsonObject, the actual bytes are inside the
// JsonBuffer with all the other nodes of the object tree.
// Memory is freed when jsonBuffer goes out of scope.
JsonObject& root = jsonBuffer.parseObject(json);
// Deserialize the JSON document
DeserializationError error = deserializeJson(doc, json);
// Test if parsing succeeds.
if (!root.success()) {
Serial.println("parseObject() failed");
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
// Fetch values.
//
// Most of the time, you can rely on the implicit casts.
// In other case, you can do root["time"].as<long>();
const char* sensor = root["sensor"];
long time = root["time"];
double latitude = root["data"][0];
double longitude = root["data"][1];
// In other case, you can do doc["time"].as<long>();
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
// Print values.
Serial.println(sensor);
@ -67,12 +69,12 @@ void loop() {
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// deserialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a tutorial on deserialization.
// It begins with a simple example, like the one above, and then adds more
// features like deserializing directly from a file or an HTTP request.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,17 +1,19 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to implement an HTTP server that sends JSON document
// in the responses.
// This example shows how to implement an HTTP server that sends a JSON document
// in the response.
// It uses the Ethernet library but can be easily adapted for Wifi.
//
// It sends the value of the analog and digital pins.
// The JSON document looks like the following:
// The JSON document contains the values of the analog and digital pins.
// It looks like that:
// {
// "analog": [ 0, 1, 2, 3, 4, 5 ],
// "digital": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]
// "analog": [0, 76, 123, 158, 192, 205],
// "digital": [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]
// }
//
// https://arduinojson.org/v6/example/http-server/
#include <ArduinoJson.h>
#include <Ethernet.h>
@ -44,22 +46,20 @@ void loop() {
EthernetClient client = server.available();
// Do we have a client?
if (!client) return;
if (!client)
return;
Serial.println(F("New client"));
// Read the request (we ignore the content in this example)
while (client.available()) client.read();
// Allocate JsonBuffer
// Use arduinojson.org/assistant to compute the capacity.
StaticJsonBuffer<500> jsonBuffer;
// Create the root object
JsonObject& root = jsonBuffer.createObject();
// Allocate a temporary JsonDocument
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<500> doc;
// Create the "analog" array
JsonArray& analogValues = root.createNestedArray("analog");
JsonArray analogValues = doc.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
// Read the analog input
int value = analogRead(pin);
@ -69,7 +69,7 @@ void loop() {
}
// Create the "digital" array
JsonArray& digitalValues = root.createNestedArray("digital");
JsonArray digitalValues = doc.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
// Read the digital input
int value = digitalRead(pin);
@ -79,31 +79,39 @@ void loop() {
}
Serial.print(F("Sending: "));
root.printTo(Serial);
serializeJson(doc, Serial);
Serial.println();
// Write response headers
client.println("HTTP/1.0 200 OK");
client.println("Content-Type: application/json");
client.println("Connection: close");
client.println(F("HTTP/1.0 200 OK"));
client.println(F("Content-Type: application/json"));
client.println(F("Connection: close"));
client.print(F("Content-Length: "));
client.println(measureJsonPretty(doc));
client.println();
// Write JSON document
root.prettyPrintTo(client);
serializeJsonPretty(doc, client);
// Disconnect
client.stop();
}
// Performance issue?
// ------------------
//
// EthernetClient is an unbuffered stream, which is not optimal for ArduinoJson.
// See: https://arduinojson.org/v6/how-to/improve-speed/
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// serialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a tutorial on serialization.
// It begins with a simple example, then adds more features like serializing
// directly to a file or an HTTP client.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,14 +1,14 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to send a JSON document to a UDP socket.
// At regular interval, it sends a UDP packet that contains the status of
// analog and digital pins.
// The JSON document looks like the following:
// It looks like that:
// {
// "analog": [ 0, 1, 2, 3, 4, 5 ],
// "digital": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]
// "analog": [0, 76, 123, 158, 192, 205],
// "digital": [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]
// }
//
// If you want to test this program, you need to be able to receive the UDP
@ -16,6 +16,8 @@
// For example, you can run netcat on your computer
// $ ncat -ulp 8888
// See https://nmap.org/ncat/
//
// https://arduinojson.org/v6/example/udp-beacon/
#include <ArduinoJson.h>
#include <Ethernet.h>
@ -43,15 +45,12 @@ void setup() {
}
void loop() {
// Allocate JsonBuffer
// Use arduinojson.org/assistant to compute the capacity.
StaticJsonBuffer<500> jsonBuffer;
// Create the root object
JsonObject& root = jsonBuffer.createObject();
// Allocate a temporary JsonDocument
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<500> doc;
// Create the "analog" array
JsonArray& analogValues = root.createNestedArray("analog");
JsonArray analogValues = doc.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
// Read the analog input
int value = analogRead(pin);
@ -61,7 +60,7 @@ void loop() {
}
// Create the "digital" array
JsonArray& digitalValues = root.createNestedArray("digital");
JsonArray digitalValues = doc.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
// Read the digital input
int value = digitalRead(pin);
@ -75,11 +74,11 @@ void loop() {
Serial.print(remoteIp);
Serial.print(F(" on port "));
Serial.println(remotePort);
root.printTo(Serial);
serializeJson(doc, Serial);
// Send UDP packet
udp.beginPacket(remoteIp, remotePort);
root.printTo(udp);
serializeJson(doc, udp);
udp.println();
udp.endPacket();
@ -87,15 +86,21 @@ void loop() {
delay(10000);
}
// Performance issue?
// ------------------
//
// EthernetUDP is an unbuffered stream, which is not optimal for ArduinoJson.
// See: https://arduinojson.org/v6/how-to/improve-speed/
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any
// serialization problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a tutorial on serialization.
// It begins with a simple example, then adds more features like serializing
// directly to a file or any stream.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -0,0 +1,75 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to deserialize a MessagePack document with
// ArduinoJson.
//
// https://arduinojson.org/v6/example/msgpack-parser/
#include <ArduinoJson.h>
void setup() {
// Initialize serial port
Serial.begin(9600);
while (!Serial) continue;
// Allocate the JSON document
//
// Inside the brackets, 200 is the capacity of the memory pool in bytes.
// Don't forget to change this value to match your JSON document.
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<200> doc;
// StaticJsonObject allocates memory on the stack, it can be
// replaced by DynamicJsonObject which allocates in the heap.
//
// DynamicJsonObject doc(200);
// MessagePack input string.
//
// Using a char[], as shown here, enables the "zero-copy" mode. This mode uses
// the minimal amount of memory because the JsonDocument stores pointers to
// the input buffer.
// If you use another type of input, ArduinoJson must copy the strings from
// the input to the JsonDocument, so you need to increase the capacity of the
// JsonDocument.
uint8_t input[] = {131, 166, 115, 101, 110, 115, 111, 114, 163, 103, 112, 115,
164, 116, 105, 109, 101, 206, 80, 147, 50, 248, 164, 100,
97, 116, 97, 146, 203, 64, 72, 96, 199, 58, 188, 148,
112, 203, 64, 2, 106, 146, 230, 33, 49, 169};
// This MessagePack document contains:
// {
// "sensor": "gps",
// "time": 1351824120,
// "data": [48.75608, 2.302038]
// }
DeserializationError error = deserializeMsgPack(doc, input);
// Test if parsing succeeded.
if (error) {
Serial.print("deserializeMsgPack() failed: ");
Serial.println(error.f_str());
return;
}
// Fetch values.
//
// Most of the time, you can rely on the implicit casts.
// In other case, you can do doc["time"].as<long>();
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
// Print values.
Serial.println(sensor);
Serial.println(time);
Serial.println(latitude, 6);
Serial.println(longitude, 6);
}
void loop() {
// not used in this example
}

View File

@ -1,55 +1,48 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows the different ways you can use Flash strings with
// ArduinoJson.
//
// Use Flash strings sparingly, because ArduinoJson duplicates them in the
// JsonBuffer. Prefer plain old char*, as they are more efficient in term of
// JsonDocument. Prefer plain old char*, as they are more efficient in term of
// code size, speed, and memory usage.
//
// https://arduinojson.org/v6/example/progmem/
#include <ArduinoJson.h>
void setup() {
#ifdef PROGMEM // <- check that Flash strings are supported
DynamicJsonBuffer jsonBuffer;
DynamicJsonDocument doc(1024);
// You can use a Flash String as your JSON input.
// WARNING: the content of the Flash String will be duplicated in the
// JsonBuffer.
JsonObject& root =
jsonBuffer.parseObject(F("{\"sensor\":\"gps\",\"time\":1351824120,"
"\"data\":[48.756080,2.302038]}"));
// WARNING: the strings in the input will be duplicated in the JsonDocument.
deserializeJson(doc, F("{\"sensor\":\"gps\",\"time\":1351824120,"
"\"data\":[48.756080,2.302038]}"));
// You can use a Flash String to get an element of a JsonObject
// You can use a Flash String as a key to get a member from JsonDocument
// No duplication is done.
long time = root[F("time")];
long time = doc[F("time")];
// You can use a Flash String to set an element of a JsonObject
// You can use a Flash String as a key to set a member of a JsonDocument
// WARNING: the content of the Flash String will be duplicated in the
// JsonBuffer.
root[F("time")] = time;
// JsonDocument.
doc[F("time")] = time;
// You can set a Flash String to a JsonObject or JsonArray:
// You can set a Flash String as the content of a JsonVariant
// WARNING: the content of the Flash String will be duplicated in the
// JsonBuffer.
root["sensor"] = F("gps");
// JsonDocument.
doc["sensor"] = F("gps");
// It works with RawJson too:
root["sensor"] = RawJson(F("\"gps\""));
// It works with serialized() too:
doc["sensor"] = serialized(F("\"gps\""));
doc["sensor"] = serialized(F("\xA3gps"), 3);
// You can compare the content of a JsonVariant to a Flash String
if (root["sensor"] == F("gps")) {
if (doc["sensor"] == F("gps")) {
// ...
}
#else
#warning PROGMEM is not supported on this platform
#endif
}
void loop() {
@ -59,12 +52,12 @@ void loop() {
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any memory
// problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a quick C++ course that explains
// how your microcontroller stores strings in memory. It also tells why you
// should not abuse Flash strings with ArduinoJson.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -1,60 +1,63 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows the different ways you can use String with ArduinoJson.
//
// Use String objects sparingly, because ArduinoJson duplicates them in the
// JsonBuffer. Prefer plain old char[], as they are more efficient in term of
// JsonDocument. Prefer plain old char[], as they are more efficient in term of
// code size, speed, and memory usage.
//
// https://arduinojson.org/v6/example/string/
#include <ArduinoJson.h>
void setup() {
DynamicJsonBuffer jsonBuffer;
DynamicJsonDocument doc(1024);
// You can use a String as your JSON input.
// WARNING: the content of the String will be duplicated in the JsonBuffer.
// WARNING: the string in the input will be duplicated in the JsonDocument.
String input =
"{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
JsonObject& root = jsonBuffer.parseObject(input);
deserializeJson(doc, input);
// You can use a String to get an element of a JsonObject
// You can use a String as a key to get a member from JsonDocument
// No duplication is done.
long time = root[String("time")];
long time = doc[String("time")];
// You can use a String to set an element of a JsonObject
// WARNING: the content of the String will be duplicated in the JsonBuffer.
root[String("time")] = time;
// You can use a String as a key to set a member of a JsonDocument
// WARNING: the content of the String will be duplicated in the JsonDocument.
doc[String("time")] = time;
// You can get a String from a JsonObject or JsonArray:
// No duplication is done, at least not in the JsonBuffer.
String sensor = root["sensor"];
// You can get the content of a JsonVariant as a String
// No duplication is done, at least not in the JsonDocument.
String sensor = doc["sensor"];
// Unfortunately, the following doesn't work (issue #118):
// sensor = root["sensor"]; // <- error "ambiguous overload for 'operator='"
// sensor = doc["sensor"]; // <- error "ambiguous overload for 'operator='"
// As a workaround, you need to replace by:
sensor = root["sensor"].as<String>();
sensor = doc["sensor"].as<String>();
// You can set a String to a JsonObject or JsonArray:
// WARNING: the content of the String will be duplicated in the JsonBuffer.
root["sensor"] = sensor;
// You can set a String as the content of a JsonVariant
// WARNING: the content of the String will be duplicated in the JsonDocument.
doc["sensor"] = sensor;
// It works with RawJson too:
root["sensor"] = RawJson(sensor);
// It works with serialized() too:
doc["sensor"] = serialized(sensor);
// You can also concatenate strings
// WARNING: the content of the String will be duplicated in the JsonBuffer.
root[String("sen") + "sor"] = String("gp") + "s";
// WARNING: the content of the String will be duplicated in the JsonDocument.
doc[String("sen") + "sor"] = String("gp") + "s";
// You can compare the content of a JsonObject with a String
if (root["sensor"] == sensor) {
if (doc["sensor"] == sensor) {
// ...
}
// Lastly, you can print the resulting JSON to a String
// WARNING: it doesn't replace the content but appends to it
String output;
root.printTo(output);
serializeJson(doc, output);
}
void loop() {
@ -64,11 +67,11 @@ void loop() {
// See also
// --------
//
// The website arduinojson.org contains the documentation for all the functions
// https://arduinojson.org/ contains the documentation for all the functions
// used above. It also includes an FAQ that will help you solve any problem.
// Please check it out at: https://arduinojson.org/
//
// The book "Mastering ArduinoJson" contains a quick C++ course that explains
// how your microcontroller stores strings in memory. On several occasions, it
// shows how you can avoid String in your program.
// Please check it out at: https://arduinojson.org/book/
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤

View File

@ -0,0 +1,4 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
check_required_components("@PROJECT_NAME@")

View File

@ -0,0 +1,95 @@
if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
add_compile_options(
-pedantic
-Wall
-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wdisabled-optimization
-Werror
-Wextra
-Wformat=2
-Winit-self
-Wmissing-include-dirs
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wparentheses
-Wredundant-decls
-Wshadow
-Wsign-conversion
-Wsign-promo
-Wstrict-aliasing
-Wundef
)
if(${COVERAGE})
set(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage")
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8) AND(NOT ${COVERAGE}))
add_compile_options(-g -Og)
else()
add_compile_options(-g -O0)
endif()
add_compile_options(
-Wstrict-null-sentinel
-Wno-vla # Allow VLA in tests
)
add_definitions(-DHAS_VARIABLE_LENGTH_ARRAY)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.5)
add_compile_options(-Wlogical-op) # the flag exists in 4.4 but is buggy
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.6)
add_compile_options(-Wnoexcept)
endif()
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(
-Wc++11-compat
-Wdeprecated-register
-Wno-vla-extension # Allow VLA in tests
)
add_definitions(
-DHAS_VARIABLE_LENGTH_ARRAY
-DSUBSCRIPT_CONFLICTS_WITH_BUILTIN_OPERATOR
)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0) AND(NOT ${COVERAGE}))
add_compile_options(-g -Og)
else()
add_compile_options(-g -O0)
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0) AND(NOT ${COVERAGE}))
add_compile_options(-g -Og)
else()
add_compile_options(-g -O0)
endif()
endif()
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_compile_options(
/W4 # Set warning level
/WX # Treats all compiler warnings as errors.
/Zc:__cplusplus # Enable updated __cplusplus macro
)
endif()
if(MINGW)
# Static link on MinGW to avoid linking with the wrong DLLs when multiple
# versions are installed.
add_link_options(-static)
endif()

View File

@ -0,0 +1,8 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(example)

View File

@ -0,0 +1,8 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
idf_component_register(
SRCS "main.cpp"
INCLUDE_DIRS ""
)

View File

@ -0,0 +1,4 @@
#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

View File

@ -0,0 +1,16 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
extern "C" void app_main() {
char buffer[256];
StaticJsonDocument<200> doc;
doc["hello"] = "world";
serializeJson(doc, buffer);
deserializeJson(doc, buffer);
serializeMsgPack(doc, buffer);
deserializeMsgPack(doc, buffer);
}

10
extras/ci/particle.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh -ex
BOARD=$1
cd "$(dirname "$0")/../../"
cp extras/particle/src/smocktest.ino src/
cp extras/particle/project.properties ./
particle compile "$BOARD"

18
extras/conf_test/avr.cpp Normal file
View File

@ -0,0 +1,18 @@
#include <ArduinoJson.h>
static_assert(ARDUINOJSON_ENABLE_PROGMEM == 1, "ARDUINOJSON_ENABLE_PROGMEM");
static_assert(ARDUINOJSON_USE_LONG_LONG == 0, "ARDUINOJSON_USE_LONG_LONG");
static_assert(ARDUINOJSON_SLOT_OFFSET_SIZE == 1,
"ARDUINOJSON_SLOT_OFFSET_SIZE");
static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN");
static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE");
static_assert(sizeof(ArduinoJson::detail::VariantSlot) == 8,
"sizeof(VariantSlot)");
void setup() {}
void loop() {}

View File

@ -0,0 +1,16 @@
#include <ArduinoJson.h>
static_assert(ARDUINOJSON_USE_LONG_LONG == 1, "ARDUINOJSON_USE_LONG_LONG");
static_assert(ARDUINOJSON_SLOT_OFFSET_SIZE == 2,
"ARDUINOJSON_SLOT_OFFSET_SIZE");
static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN");
static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE");
static_assert(sizeof(ArduinoJson::detail::VariantSlot) == 16,
"sizeof(VariantSlot)");
void setup() {}
void loop() {}

15
extras/conf_test/x64.cpp Normal file
View File

@ -0,0 +1,15 @@
#include <ArduinoJson.h>
static_assert(ARDUINOJSON_USE_LONG_LONG == 1, "ARDUINOJSON_USE_LONG_LONG");
static_assert(ARDUINOJSON_SLOT_OFFSET_SIZE == 4,
"ARDUINOJSON_SLOT_OFFSET_SIZE");
static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN");
static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE");
static_assert(sizeof(ArduinoJson::detail::VariantSlot) == 32,
"sizeof(VariantSlot)");
int main() {}

15
extras/conf_test/x86.cpp Normal file
View File

@ -0,0 +1,15 @@
#include <ArduinoJson.h>
static_assert(ARDUINOJSON_USE_LONG_LONG == 1, "ARDUINOJSON_USE_LONG_LONG");
static_assert(ARDUINOJSON_SLOT_OFFSET_SIZE == 2,
"ARDUINOJSON_SLOT_OFFSET_SIZE");
static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN");
static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE");
static_assert(sizeof(ArduinoJson::detail::VariantSlot) == 16,
"sizeof(VariantSlot)");
int main() {}

View File

@ -0,0 +1,58 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(MSVC)
add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
endif()
add_executable(msgpack_reproducer
msgpack_fuzzer.cpp
reproducer.cpp
)
target_link_libraries(msgpack_reproducer
ArduinoJson
)
add_executable(json_reproducer
json_fuzzer.cpp
reproducer.cpp
)
target_link_libraries(json_reproducer
ArduinoJson
)
macro(add_fuzzer name)
set(FUZZER "${name}_fuzzer")
set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus")
set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus")
add_executable("${FUZZER}"
"${name}_fuzzer.cpp"
)
target_link_libraries("${FUZZER}"
ArduinoJson
)
set_target_properties("${FUZZER}"
PROPERTIES
COMPILE_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
LINK_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
)
add_test(
NAME "${FUZZER}"
COMMAND "${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1
)
set_tests_properties("${FUZZER}"
PROPERTIES
LABELS "Fuzzing"
)
endmacro()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6)
add_fuzzer(json)
add_fuzzer(msgpack)
endif()

22
extras/fuzzing/Makefile Normal file
View File

@ -0,0 +1,22 @@
# CAUTION: this file is invoked by https://github.com/google/oss-fuzz
CXXFLAGS += -I../../src -DARDUINOJSON_DEBUG=1 -std=c++11
all: \
$(OUT)/json_fuzzer \
$(OUT)/json_fuzzer_seed_corpus.zip \
$(OUT)/json_fuzzer.options \
$(OUT)/msgpack_fuzzer \
$(OUT)/msgpack_fuzzer_seed_corpus.zip \
$(OUT)/msgpack_fuzzer.options
$(OUT)/%_fuzzer: %_fuzzer.cpp $(shell find ../../src -type f)
$(CXX) $(CXXFLAGS) $< -o$@ $(LIB_FUZZING_ENGINE)
$(OUT)/%_fuzzer_seed_corpus.zip: %_seed_corpus/*
zip -j $@ $?
$(OUT)/%_fuzzer.options:
@echo "[libfuzzer]" > $@
@echo "max_len = 256" >> $@
@echo "timeout = 10" >> $@

View File

@ -0,0 +1,11 @@
#include <ArduinoJson.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
DynamicJsonDocument doc(4096);
DeserializationError error = deserializeJson(doc, data, size);
if (!error) {
std::string json;
serializeJson(doc, json);
}
return 0;
}

View File

@ -0,0 +1 @@
9720730739393920739

View File

@ -0,0 +1,2 @@
*
!.gitignore

View File

@ -0,0 +1,11 @@
#include <ArduinoJson.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
DynamicJsonDocument doc(4096);
DeserializationError error = deserializeMsgPack(doc, data, size);
if (!error) {
std::string json;
serializeMsgPack(doc, json);
}
return 0;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>hello<EFBFBD>world

View File

@ -0,0 +1 @@
<EFBFBD>

View File

@ -0,0 +1 @@


View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>one<01>two

View File

@ -0,0 +1 @@
<EFBFBD>hello world

View File

@ -0,0 +1 @@
<EFBFBD>@H<><48>

View File

@ -0,0 +1 @@
<EFBFBD>@ !<21><><EFBFBD>o

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
Ҷi<EFBFBD>.

View File

@ -0,0 +1 @@
<EFBFBD>4Vx<56><78><EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<EFBFBD>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<EFBFBD>hello

View File

@ -0,0 +1 @@
<EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD>09

View File

@ -0,0 +1 @@
<EFBFBD>4Vx

View File

@ -0,0 +1 @@
<EFBFBD>4Vx<56><78><EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1,50 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
// This file is NOT use by Google's OSS fuzz
// I only use it to reproduce the bugs found
#include <stdint.h> // size_t
#include <stdio.h> // fopen et al.
#include <stdlib.h> // exit
#include <iostream>
#include <vector>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
std::vector<uint8_t> read(const char* path) {
FILE* f = fopen(path, "rb");
if (!f) {
std::cerr << "Failed to open " << path << std::endl;
exit(1);
}
fseek(f, 0, SEEK_END);
size_t size = static_cast<size_t>(ftell(f));
fseek(f, 0, SEEK_SET);
std::vector<uint8_t> buffer(size);
if (fread(buffer.data(), 1, size, f) != size) {
fclose(f);
std::cerr << "Failed to read " << path << std::endl;
exit(1);
}
fclose(f);
return buffer;
}
int main(int argc, const char* argv[]) {
if (argc < 2) {
std::cerr << "Usage: msgpack_fuzzer files" << std::endl;
return 1;
}
for (int i = 1; i < argc; i++) {
std::cout << "Loading " << argv[i] << std::endl;
std::vector<uint8_t> buffer = read(argv[i]);
LLVMFuzzerTestOneInput(buffer.data(), buffer.size());
}
return 0;
}

Some files were not shown because too many files have changed in this diff Show More