Compare commits

..

757 Commits

Author SHA1 Message Date
Benoit Blanchon de9239caab Set version to 6.21.0 2023-03-14 21:05:56 +01:00
Benoit Blanchon c89a2025ce Make string support generic (issue #1807) 2023-03-13 12:19:05 +01:00
Benoit Blanchon 42ae8c3037 Remove negativeBinaryPowersOfTenPlusOne 2023-02-22 15:42:10 +01:00
Benoit Blanchon 319ececf26 Keep only one implementation of make_float() 2023-02-22 15:42:10 +01:00
Benoit Blanchon 886254c41e Reduce size of make_float() 2023-02-22 15:42:10 +01:00
Benoit Blanchon 4e7099dc73 Add pgm_ptr<T> 2023-02-22 15:42:10 +01:00
Benoit Blanchon 26948cb83a Use 64-bits literals to forge 64-bits literals 2023-02-22 11:40:15 +01:00
Benoit Blanchon 0f8698e655 Replace ARDUINOJSON_EXPANDX with variadic macros (#1820) 2023-02-22 11:24:51 +01:00
Benoit Blanchon b2b995edb3 Use delete instead of hiding copy constructors and assignments (#1820) 2023-02-17 10:59:57 +01:00
Benoit Blanchon 33a4773fbd Set clang-format standard to C++11 (#1820) 2023-02-16 11:51:02 +01:00
Benoit Blanchon daa87e12dc Update copyright notice 2023-02-16 11:45:01 +01:00
Benoit Blanchon 5abf512276 Reduce number of overloads of deserializeJson() and deserializeMsgPack() (#1820) 2023-02-16 11:17:15 +01:00
Benoit Blanchon 0dd4a68913 Use only letters to encode configuration in the namespace 2023-02-14 10:04:49 +01:00
Benoit Blanchon 8971127b66 Fix build on GCC 6 2023-02-14 10:04:49 +01:00
Benoit Blanchon 1b66a217bf Replace ARDUINOJSON_NAMESPACE with an inline namespace (#1820) 2023-02-14 10:04:48 +01:00
Benoit Blanchon 34dd46110b Remove safe bool idiom (#1820) 2023-02-13 11:12:41 +01:00
Benoit Blanchon 8f7211a50f Remove ARDUINOJSON_HAS_NULLPTR (#1820) 2023-02-10 17:02:52 +01:00
Benoit Blanchon 2be4ee732a Remove ARDUINOJSON_HAS_RVALUE_REFERENCES (#1820) 2023-02-10 17:02:52 +01:00
Benoit Blanchon 3bdedc9a2f Remove ARDUINOJSON_HAS_LONG_LONG (#1820) 2023-02-10 17:02:52 +01:00
Benoit Blanchon f699954f4d Remove support for __int64 (#1820) 2023-02-10 17:02:52 +01:00
Benoit Blanchon 407fc2cd45 Drop support for C++98/C++03 (closes #1820) 2023-02-10 17:02:52 +01:00
Benoit Blanchon 91fe6dcae8 Fix clang-tidy warning "Called C++ object pointer is null" 2023-02-10 17:02:51 +01:00
Benoit Blanchon 62dea9d364 Reformat CMake files 2023-02-10 17:02:51 +01:00
Benoit Blanchon e0bdc4bff1 Remove unused variables (fixes #1858) 2023-02-10 17:02:51 +01:00
Benoit Blanchon 007b4f3362 Update Catch library to 2.13.10 (#1820) 2023-02-10 17:02:51 +01:00
Benoit Blanchon 94b2b3f9ce Run all tests with C++11 enabled (#1820) 2023-02-10 17:02:51 +01:00
Benoit Blanchon c2de812cbd Set minimum Clang version to 3.8 (#1820) 2023-02-10 17:02:51 +01:00
Benoit Blanchon 669ee4dfe3 Set minimum GCC version to 6 (#1820) 2023-02-10 17:02:33 +01:00
Benoit Blanchon e054cba610 Set minimum Visual Studio version to 2017 (#1820) 2023-02-10 14:49:24 +01:00
Benoit Blanchon 3d8287265c Remove unused NOEXCEPT macro 2023-02-09 19:06:36 +01:00
Benoit Blanchon de7afc2015 Minor improvements in the release workflow 2023-02-08 16:51:47 +01:00
Benoit Blanchon ae0499fd57 Update idf_component.yml 2023-02-08 16:46:15 +01:00
Benoit Blanchon b33966c755 Set version to 6.20.1 2023-02-08 16:42:04 +01:00
Benoit Blanchon d2cd13bf2e CI: automatically publish Particle library 2023-02-08 16:40:06 +01:00
Benoit Blanchon 06b2263329 README: reduce the size of the logo 2023-02-08 16:40:06 +01:00
Benoit Blanchon d4bb839ce9 CI: remove the draft flag on the GitHub Release 2023-02-08 16:40:04 +01:00
Benoit Blanchon 6013a1a56f Fix the name of the license file 2023-02-08 16:40:01 +01:00
Benoit Blanchon 34b38e07c7 Deduce template argument of pgm_read() 2023-01-26 18:10:41 +01:00
Benoit Blanchon 1ec16ca94f Use pgm_read() instead of ARDUINOJSON_READ_STATIC_ARRAY 2023-01-26 14:55:46 +01:00
Benoit Blanchon 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
Benoit Blanchon bf93779b4f Update catch.hpp (fixes #1856)
See also catchorg/Catch2#2627
2023-01-17 13:53:47 +01:00
Benoit Blanchon dd0f7019ef CI: Update runner to get GCC 11.3 (resolves #1859) 2023-01-17 13:53:47 +01:00
Benoit Blanchon 175e5b3062 Add missing semicolon (fixes #1857) 2023-01-17 08:59:45 +01:00
Benoit Blanchon 7885155634 Add to IDF Component Registry (closes #1844) 2023-01-14 09:26:12 +01:00
Benoit Blanchon 1909ffe0f9 Remove link to Discord server 2023-01-13 08:52:33 +01:00
Johan Vromans 3345255f16 Fix comma tests. 2023-01-13 08:21:54 +01:00
Benoit Blanchon c49adfd6da Test custom converter for std::array (issue #1840) 2022-12-31 10:48:20 +01:00
Benoit Blanchon 5094b84a46 Set version to 6.20.0 2022-12-26 17:35:54 +01:00
Benoit Blanchon 191fc5dff4 Remove support for naked char (was deprecated since 6.18.0) 2022-12-26 11:02:34 +01:00
Benoit Blanchon cb9c90f2d0 Mark adapter's storagePolicy() as const 2022-12-26 10:23:48 +01:00
Benoit Blanchon 09f9bd6b8b Fix detection of char types 2022-12-26 10:21:57 +01:00
Benoit Blanchon 67abbef818 Fix GitHub Actions badge (badges/shields#8671) 2022-12-26 10:09:06 +01:00
Benoit Blanchon 7ed2559e9e Test custom converter for std::vector<T> (issue #1840) 2022-12-26 10:09:06 +01:00
Benoit Blanchon ac8e5f01db Clang-Format: set AllowShortLoopsOnASingleLine to false 2022-12-24 15:48:00 +01:00
Benoit Blanchon 396d2a7b3b CI: check URLs 2022-12-21 19:20:51 +01:00
Benoit Blanchon de725e0a4e Add documentation to most public symbols 2022-12-21 19:20:51 +01:00
Benoit Blanchon 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
Benoit Blanchon d602232b9f Update change log 2022-12-19 14:41:53 +01:00
Benoit Blanchon b0730f04f7 Rename VariantRef to JsonVariant 2022-12-19 14:41:53 +01:00
Benoit Blanchon ef8ed28aec Rename VariantConstRef to JsonVariantConst 2022-12-19 14:41:43 +01:00
Benoit Blanchon b8eff868e6 Rename String to JsonString 2022-12-19 14:41:43 +01:00
Benoit Blanchon d0b619ea93 Rename UInt to JsonUInt 2022-12-19 14:41:43 +01:00
Benoit Blanchon 652d70fe2c Rename Integer to JsonInteger 2022-12-19 14:41:43 +01:00
Benoit Blanchon 8228aec74b Rename Float to JsonFloat 2022-12-19 14:41:43 +01:00
Benoit Blanchon 2f2e0e9415 Rename ObjectIterator to JsonObjectIterator 2022-12-19 12:21:11 +01:00
Benoit Blanchon 3a9803679f Rename Pair to JsonPair 2022-12-19 12:21:11 +01:00
Benoit Blanchon dc42d93b0f Rename ObjectConstRef to JsonObjectConst 2022-12-19 12:20:37 +01:00
Benoit Blanchon dff07ebfe8 Rename ObjectRef to JsonObject 2022-12-19 12:20:13 +01:00
Benoit Blanchon 4c456a95a3 Rename ArrayIterator to JsonArrayIterator 2022-12-19 12:12:28 +01:00
Benoit Blanchon 83e5d9d150 Rename ArrayConstRef to JsonArrayConst 2022-12-19 12:12:28 +01:00
Benoit Blanchon 7079aa99d7 Rename ArrayRef to JsonArray 2022-12-19 12:10:58 +01:00
Benoit Blanchon 208a22e324 Update GitHub action dessant/lock-threads 2022-12-13 08:28:20 +01:00
Robert M Lugg 9afae963e8 Update tutorial links to point to version 6 2022-12-05 21:00:46 +01:00
Benoit Blanchon 1828dec658 CI: add CTest output to the job summary 2022-12-05 21:00:24 +01:00
Benoit Blanchon afe2434baf Extract ObjectConstRef.hpp from ObjectRef.hpp 2022-12-05 21:00:24 +01:00
Benoit Blanchon e08f8d5b51 Inline class ObjectRefBase 2022-12-05 21:00:24 +01:00
Benoit Blanchon 7e3b40f379 Extract ArrayConstRef.hpp from ArrayRef.hpp 2022-12-05 21:00:24 +01:00
Benoit Blanchon 584770dc6f Inline class ArrayRefBase 2022-12-05 21:00:24 +01:00
Benoit Blanchon 5d2a440c69 Remove ArrayFunctions.hpp and ObjectFunctions.hpp 2022-12-05 21:00:24 +01:00
Benoit Blanchon ac14f29e6c Move definitions of JSON_ARRAY_SIZE() and JSON_OBJECT_SIZE() 2022-12-05 21:00:24 +01:00
Benoit Blanchon 3d62fa8af2 CI: use ubuntu-20.04 for GCC 2022-12-05 21:00:24 +01:00
Benoit Blanchon 0f85a55cac Implement VariantRefBase with a CRTP 2022-12-05 21:00:24 +01:00
Benoit Blanchon 21db92af47 Simpify variant reader 2022-11-26 18:32:33 +01:00
Benoit Blanchon 6447520b5b Replace Yes/No with int/char 2022-11-22 18:56:42 +01:00
Benoit Blanchon 079ccadbee Remove sponsor techexplorations 2022-11-08 08:59:18 +01:00
Benoit Blanchon 615f675840 Update dessant/lock-threads 2022-11-03 10:11:45 +01:00
Benoit Blanchon 2182c83b87 Remove ArrayShortcuts and ObjectShortcuts 2022-11-02 09:18:02 +01:00
Benoit Blanchon b8d1dccb21 Test IsString<String> and IsString<StringSumHelper> 2022-10-31 18:02:07 +01:00
Benoit Blanchon c3d5e9382d Implement IsString from StringAdapter 2022-10-26 17:20:33 +02:00
Benoit Blanchon ecb72f9a9d Add StringAdapter<T> 2022-10-26 16:19:14 +02:00
Benoit Blanchon 7004c39af6 variantGetOrAddMember() takes an adapted string like all its siblings 2022-10-26 10:44:21 +02:00
Benoit Blanchon 057956225c Add namespace StringStoragePolicy 2022-10-26 10:41:42 +02:00
Benoit Blanchon b27990f780 Attach copy policy to string adapters 2022-10-26 10:37:18 +02:00
Benoit Blanchon 61c6f8ba59 CI : update macOS runner 2022-10-21 17:40:52 +02:00
Benoit Blanchon d8d37ba7ad CI: update deprecated actions 2022-10-21 17:37:15 +02:00
Benoit Blanchon 92d6bae25c Remove ArrayIterator::internal() and ObjectIterator::internal() 2022-10-14 18:11:55 +02:00
Benoit Blanchon 6e17c3e6f9 Extract VariantRefBase from VariantProxy 2022-10-03 19:14:05 +02:00
Benoit Blanchon 8ee67b0229 Fix brew: command not found (actions/runner-images#6283) 2022-10-03 09:54:48 +02:00
Benoit Blanchon 07b9153ae4 CI: Add CodeQL 2022-09-22 10:05:55 +02:00
Benoit Blanchon abfcac4674 README: bigger logo on mobile 2022-09-20 17:01:47 +02:00
Benoit Blanchon cde8cd50f8 VSCode: configure include path 2022-09-20 16:55:43 +02:00
Benoit Blanchon cf4436e581 Extract VariantProxy from ElementProxy and MemberProxy 2022-08-30 10:25:03 +02:00
Benoit Blanchon 2b6bb78a09 Don't call operator VariantConstRef in VariantComparer 2022-08-30 10:25:03 +02:00
Benoit Blanchon ffa7f8d22d Make MemberProxy and `ElementProxy similar 2022-08-30 10:25:03 +02:00
Andrii Pereverziev f73be9cf0f Fix typo.
DeserializationOpion --> DeserializationOption
2022-08-10 09:06:45 +02:00
Benoit Blanchon 8002722f3b Clang-format: set DerivePointerAlignment to false 2022-08-09 16:52:17 +02:00
Benoit Blanchon 62e83133cd Remove JsonDocument::data() and JsonDocument::memoryPool() 2022-08-09 10:38:36 +02:00
Benoit Blanchon 1d21027e2a Fix lax parsing of true, false, and null (fixes #1781) 2022-08-06 09:15:07 +02:00
Benoit Blanchon 5705247e5f Fix replacement for getOrAddElement() and getOrAddMember() 2022-08-04 10:47:02 +02:00
Benoit Blanchon dde9e9fc26 Remove member MsgPackDeserializer::_error
This reduces the code size by 54 bytes on AVR.
2022-07-29 11:51:46 +02:00
Benoit Blanchon a6da4ad452 Remove member JsonDeserializer::_error
This reduces the code size by 72 bytes on AVR.
2022-07-29 11:51:46 +02:00
Benoit Blanchon e2a29eef24 CI: simplify Ubuntu package sources 2022-07-29 11:31:09 +02:00
Benoit Blanchon 043ee651a9 CI: remove dependency on Ubuntu 21.04 "The Hirsute Hippo" 2022-07-29 11:30:47 +02:00
Benoit Blanchon 84b7037b3e Add VariantAttorney 2022-07-07 14:32:43 +02:00
Benoit Blanchon c5838a876b Remove getElement(), getOrAddElement(), getMember(), and getOrAddMember() 2022-07-07 14:32:43 +02:00
Benoit Blanchon 750cd0be92 Add collectionToVariant() 2022-07-07 14:32:43 +02:00
Benoit Blanchon 758580bfb6 Rename addElement() to add() 2022-07-07 14:32:43 +02:00
Benoit Blanchon 04872b6db8 Simplify ProgmemExample.ino and StringExample.ino 2022-07-07 14:32:41 +02:00
Benoit Blanchon 58c7c919f2 Remove unused arrayAccept() and objectAccept() 2022-07-07 09:44:58 +02:00
Benoit Blanchon 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
Benoit Blanchon 3b3ab8c4e1 Inline variantAsArray() and variantAsObject() 2022-07-05 14:02:41 +02:00
Benoit Blanchon 5b06b1564e Remove undocumented accept() functions 2022-07-03 17:38:03 +02:00
Benoit Blanchon 77b4270d97 Remove Visitable 2022-07-03 15:37:08 +02:00
Benoit Blanchon 7c2ca773ff README: update Tech Explorations's link 2022-06-10 12:12:26 +02:00
Benoit Blanchon e2bb2cec7b Fix comparison operators for JsonObject and JsonObjectConst 2022-06-10 11:14:59 +02:00
Benoit Blanchon ff4e837df5 Fix comparison operators for JsonArray and JsonArrayConst 2022-06-09 21:06:32 +02:00
Benoit Blanchon fb904033d3 Replace serializeJson()'s template parameter with JsonVariantConst 2022-06-02 20:36:32 +02:00
Benoit Blanchon e6cd16aec4 Add missing const specifiers in serializers 2022-05-23 19:20:15 +02:00
Benoit Blanchon ee74c3bb1c Inline variantAccept() 2022-05-23 19:17:18 +02:00
Benoit Blanchon 37faa7ce13 Merge definitions of VariantConstRef::accept() and VariantRef::accept() 2022-05-23 19:11:09 +02:00
Benoit Blanchon 3d6c328a4f Add JsonVariant::link() (resolves #1343) 2022-04-27 15:08:13 +02:00
Benoit Blanchon 5577d18377 JsonVariant: add tests for size() 2022-04-27 15:08:13 +02:00
Benoit Blanchon 1d103a1528 MemberProxy: move tests for createNestedArray() and createNestedObject() 2022-04-27 15:07:26 +02:00
Benoit Blanchon 7b19a4b6e7 Add getMemberConst() and getElementConst() 2022-04-27 15:07:26 +02:00
Benoit Blanchon ac1d29fac0 Add meta function ConverterNeedsWriteableRef<T> 2022-04-27 15:07:26 +02:00
Benoit Blanchon 98037e5742 Move several functions from VariantImpl.hpp to VariantRef.hpp 2022-04-27 15:07:26 +02:00
Benoit Blanchon d0e3808dd0 Move declaration of VariantConstRef above VariantRef 2022-04-27 15:07:25 +02:00
Benoit Blanchon 3760a643cb Implement comparison out of VariantData 2022-04-27 15:07:25 +02:00
Benoit Blanchon fc9d8aa31e Implement nesting() out of VariantData 2022-04-07 21:11:31 +02:00
Benoit Blanchon ccfbb5fd1d Fix 9.22337e+18 outside range of representable values of type 'long' 2022-04-07 20:59:20 +02:00
Benoit Blanchon c9fbc5e40a README: remove utm_source/utm_medium to make links more readable (#1735) 2022-04-07 18:49:39 +02:00
Benoit Blanchon 67b6797b6d Set version to 6.19.4 2022-04-05 10:53:11 +02:00
Benoit Blanchon 8d9504239b Fix comparisons operators with const JsonDocument& 2022-04-05 10:12:17 +02:00
Benoit Blanchon bf5d0c790c Add implicit conversion from JsonDocument to JsonVariant 2022-03-23 17:17:35 +01:00
Benoit Blanchon f4379f97ae Format code with clang-format 2022-03-23 17:17:35 +01:00
Benoit Blanchon 3dc67c5663 Add memoryUsage() to ElementProxy and MemberProxy (fixes #1730) 2022-03-19 12:11:40 +01:00
Benoit Blanchon 47f90b02c3 CI: run apt-get update before installing g++-multilib 2022-03-09 08:33:26 +01:00
Benoit Blanchon 27c924746b CI: run apt-get update before installing valgrind 2022-03-08 19:09:56 +01:00
Benoit Blanchon 7abf875071 Set version to 6.19.3 2022-03-08 17:24:14 +01:00
Benoit Blanchon e3e375f5cd MessagePack: serialize round floats as integers (fixes #1718) 2022-02-28 19:38:26 +01:00
Benoit Blanchon ff06292d74 Fix -Wsign-conversion -funsigned-char (fixes #1715) 2022-02-28 10:00:12 +01:00
Benoit Blanchon c1278797f2 CI: use -funsigned-char in one GCC build (issue #1715) 2022-02-28 09:50:32 +01:00
Benoit Blanchon 421ecec0dd Tests: trim trailing white spaces 2022-02-25 10:28:42 +01:00
Benoit Blanchon 89ed54362b Fix -Wsign-conversion on GCC 8 (fixes #1715) 2022-02-25 10:28:42 +01:00
Benoit Blanchon 986f77fa15 Tests: link with -static on MinGW 2022-02-25 10:28:22 +01:00
Benoit Blanchon f831ed395d Fix JsonString operator == and != for non-zero-terminated string 2022-02-17 17:33:16 +01:00
Benoit Blanchon a880614a75 Fix call of overloaded 'String(const char*, int)' is ambiguous 2022-02-17 17:33:16 +01:00
Benoit Blanchon ef8379df1b Set version to 6.19.2 2022-02-14 09:06:06 +01:00
Benoit Blanchon 702f8c2e2f Fix cannot convert 'pgm_p' to 'const void*' (fixes #1707) 2022-02-06 11:14:23 +01:00
Benoit Blanchon 6806393285 Wandbox: update compiler version 2022-01-14 09:23:12 +01:00
Benoit Blanchon dea8387586 Publish script: don't stop if wandbox fails 2022-01-14 09:22:55 +01:00
Benoit Blanchon 6ea2815341 Set version to 6.19.1 2022-01-14 08:49:57 +01:00
Benoit Blanchon 3c145f1782 Add assertions to comfort Clang-Tidy 2022-01-13 20:25:49 +01:00
Benoit Blanchon 21b2c76524 Fix filter not working in zero-copy mode (fixes #1697) 2022-01-13 20:25:49 +01:00
Benoit Blanchon 4f6244eef4 Replace CopiedString and LinkedString with JsonString 2022-01-13 16:15:53 +01:00
Benoit Blanchon 973858b835 Remove unused CopiedString in MemoryPool 2022-01-13 16:10:42 +01:00
Benoit Blanchon ee12155617 Fix crash when adding an object member in a too small JsonDocument 2022-01-13 11:52:45 +01:00
Benoit Blanchon 4b4c68df5f Changelog: remove empty line 2022-01-13 11:52:45 +01:00
Benoit Blanchon fcae33d574 Publish script: fix change log extraction code 2022-01-08 17:59:07 +01:00
Benoit Blanchon 896f50eeb9 Publish script: check that all required commands are available 2022-01-08 16:40:21 +01:00
Benoit Blanchon 9693fd2d74 Set version to 6.19.0 2022-01-08 16:21:29 +01:00
Benoit Blanchon 37f1c87338 Publish script: check that all changes are committed 2022-01-08 16:21:09 +01:00
Benoit Blanchon 4977de38fc Remove .devcontainer/ 2022-01-05 12:08:30 +01:00
Benoit Blanchon 9f4750637b Add PlatformIO badge to README 2022-01-05 12:08:18 +01:00
Benoit Blanchon 0c65e13aa3 Add LGTM grade badge to README 2022-01-02 10:12:13 +01:00
Benoit Blanchon af18994deb Update copyright notice 2022-01-01 10:01:05 +01:00
Benoit Blanchon 8f9599cd19 Format appveyor.yml 2022-01-01 10:01:05 +01:00
Benoit Blanchon 78660c6e07 Fix support of long long in catch 2022-01-01 10:01:05 +01:00
Benoit Blanchon 4f786db82d CI: build on multiple versions of MinGW 2022-01-01 09:51:05 +01:00
Benoit Blanchon ad7b749dec CI: build with arduino-cli 2021-12-31 14:39:39 +01:00
Benoit Blanchon 29ba744d64 Add a polyfill for pgm_read_ptr() (issue #1433) 2021-12-31 14:39:38 +01:00
Benoit Blanchon a2e1021d7d Use pgm_read_dword() instead of pgm_read_float() (issue #1433) 2021-12-31 14:39:38 +01:00
Benoit Blanchon d20c3c65c8 Add a polyfill for pgm_read_dword() (issue #1433) 2021-12-31 14:39:38 +01:00
Benoit Blanchon 8f029e6096 Fix Visual Studio command line error D9025
https://stackoverflow.com/a/58711983/1164966
2021-12-31 14:39:38 +01:00
Benoit Blanchon 91ed68b4a6 Fix conflicting definition of ARDUINOJSON_DEFINE_STATIC_ARRAY() 2021-12-31 14:39:38 +01:00
Benoit Blanchon 67fc2d9897 Assume PROGMEM is available as soon as ARDUINO is defined (#1693) 2021-12-31 11:00:50 +01:00
Benoit Blanchon 055304bf01 Ignore Visual Studio's /out/ folder 2021-12-29 10:23:15 +01:00
Benoit Blanchon c2800ace32 Include Arduino.h before stdlib.h to avoid conflict (closes #1693) 2021-12-27 13:16:24 +01:00
Paulo Cabral Sanz ec7ffa20f2 Avoid Arduino.h when all its features are disabled (fixes #1692) 2021-12-27 13:16:24 +01:00
Benoit Blanchon ada1f2a894 Add support for char[][] in copyArray() 2021-12-20 17:51:44 +01:00
Benoit Blanchon 184a7c4fbd Add support for arbitrary array rank in copyArray() 2021-12-20 17:51:27 +01:00
Benoit Blanchon 84e9447f12 Remove redundant copy constructor of AllocatorOwner 2021-12-19 14:08:19 +01:00
Benoit Blanchon ca073fda46 Remove version 5 from change log 2021-12-16 14:56:28 +01:00
Benoit Blanchon 0f529a3587 Renamed undocumented function isUndefined() to isUnbound() 2021-12-16 14:55:26 +01:00
Benoit Blanchon e16767af92 Avoid pool reallocation in BasicJsonDocument's copy assignment 2021-12-16 14:42:54 +01:00
Benoit Blanchon 3166356484 Test capacity after calling BasicJsonDocument's copy assignment 2021-12-16 14:28:30 +01:00
Benoit Blanchon abdd9d81db Reorder lines in changelog 2021-12-14 10:42:01 +01:00
Benoit Blanchon 3bf47761c8 Fix return type of StaticJsonDocument::operator= 2021-12-14 10:41:25 +01:00
Benoit Blanchon f39d8f548f CI: Add Visual Studio 2022 2021-12-12 15:48:51 +01:00
Benoit Blanchon 90d750e4d9 Increase coverage 2021-12-07 16:08:44 +01:00
Benoit Blanchon ca24ed48f5 Separate string adapter from storage policy 2021-12-07 16:08:44 +01:00
Benoit Blanchon 51937778dd Add operator<<(std::ostream&, const JsonString&) 2021-12-07 16:08:44 +01:00
Benoit Blanchon be70f6ddd7 Support NUL inside string values (issue #1646) 2021-12-07 16:08:44 +01:00
Benoit Blanchon a27398e445 Check for NUL terminator in MemoryPool::findString() 2021-11-24 19:06:49 +01:00
Benoit Blanchon 43b2e2e774 Append terminator in saveStringFromFreeZone() 2021-11-24 19:06:49 +01:00
Benoit Blanchon 62f9b94ab1 Add CopiedString and LinkedString 2021-11-24 19:06:49 +01:00
Benoit Blanchon b06bbd9d2a Fix inconsistent pool size in BasicJsonDocument's copy constructor 2021-11-23 10:49:35 +01:00
Benoit Blanchon 2df1bc7d4f Fix call of overloaded 'swap(...)' is ambiguous (fixes #1678) 2021-11-23 10:47:31 +01:00
Benoit Blanchon 599e927590 Fix JsonVariant::memoryUsage() for raw strings 2021-11-12 16:55:41 +01:00
Benoit Blanchon 0429016ff1 Remove IsWriteableString 2021-11-12 15:28:33 +01:00
Benoit Blanchon bd42b9638a README: add sponsors section 2021-11-11 09:45:59 +01:00
Benoit Blanchon b1a826b03a README: remove empty lines between the badges 2021-11-11 09:23:58 +01:00
Benoit Blanchon 5ed5f3687b Improve test coverage 2021-10-24 09:58:39 +02:00
Benoit Blanchon 943a902a0b Remove DeserializationError == bool and DeserializationError != bool 2021-10-24 09:58:39 +02:00
Benoit Blanchon a7873389c6 Change VariantData::asString() return type to JsonString 2021-10-24 09:58:39 +02:00
Benoit Blanchon acfa174333 Add safe bool idiom in JsonString 2021-10-24 09:58:39 +02:00
Benoit Blanchon 8418845c8d Add is<JsonString>() 2021-10-24 09:58:39 +02:00
Benoit Blanchon df4a4b9e1d Add as<JsonString>() 2021-10-24 09:58:13 +02:00
Benoit Blanchon 7f5497db55 VSCode: exclude catch/ from search 2021-10-22 14:11:50 +02:00
Benoit Blanchon e4658e963f Change the default of ARDUINOJSON_USE_LONG_LONG to 1 on 32-bit platforms 2021-10-19 22:25:45 +02:00
Benoit Blanchon 7764515f56 Change the default of ARDUINOJSON_USE_DOUBLE to 1 2021-10-19 22:25:45 +02:00
Benoit Blanchon 7046c38c84 Remove ARDUINOJSON_EMBEDDED_MODE 2021-10-19 22:25:45 +02:00
Benoit Blanchon 9e9bb30a57 CI: Test ArduinoJson's configuration 2021-10-19 15:36:32 +02:00
Benoit Blanchon 41d1be24cc Update GitHub issue templates 2021-10-11 15:20:14 +02:00
Benoit Blanchon 7d3b475e24 Update the README 2021-10-11 15:17:36 +02:00
Benoit Blanchon f82a227da6 Set version to 6.18.5 2021-09-28 17:18:44 +02:00
Benoit Blanchon fcd8159617 Set ARDUINOJSON_EMBEDDED_MODE to 1 on Nios II (closes #1657) 2021-09-28 15:58:18 +02:00
Benoit Blanchon f51ccb5c3f README: added link to Discord server 2021-09-21 16:20:52 +02:00
Benoit Blanchon e0cd5b6405 Increased test coverage 2021-09-12 10:13:12 +02:00
Benoit Blanchon 6a71f31820 Set version to 6.18.4 2021-09-06 09:11:22 +02:00
Benoit Blanchon 3428ab1e89 Added a comment to easily diagnose issue #1648 2021-09-03 08:31:51 +02:00
Benoit Blanchon 956e4a7cbb Fixed deserialization of \u0000 (issue #1646) 2021-08-31 14:23:58 +02:00
Benoit Blanchon 669bad27d4 CI: added a workaround for adafruit/Adafruit_nRF52_Arduino#653 2021-08-22 18:01:56 +02:00
Benoit Blanchon 2c3ae1c181 Filter: exact match takes precedence over wildcard (fixes #1628) 2021-08-13 10:35:15 +02:00
Benoit Blanchon f570fe8c37 Fixed error expected unqualified-id on GCC 11 (fixes #1622) 2021-08-03 11:39:18 +02:00
Benoit Blanchon 1b74ad0731 Fixed error 'dummy' may be used uninitialized on GCC 11 2021-08-03 11:39:07 +02:00
Benoit Blanchon 6717700d3b CI: added GCC 11 2021-08-03 10:42:37 +02:00
Benoit Blanchon b810833145 Set version to 6.18.3 2021-07-27 15:44:36 +02:00
Benoit Blanchon 9d58e566fd Added as<std::string_view>() and is<std::string_view>() 2021-07-27 14:16:39 +02:00
Benoit Blanchon 6632fa8da1 Removed StringAdapter::equals() 2021-07-27 14:16:39 +02:00
Benoit Blanchon 5790f3c8f7 Refactored string adapters: only one IsString<T> and adaptString() 2021-07-27 14:16:18 +02:00
Benoit Blanchon 4073b52c00 Changed return type of convertToJson() and Converter::toJson() to void 2021-07-23 15:11:48 +02:00
Benoit Blanchon f5c7a6478e Publish script: fixed frontmatter for arduinojson.org 2021-07-19 10:19:04 +02:00
Benoit Blanchon ebf58320ca Set version to 6.18.2 2021-07-19 10:11:21 +02:00
Benoit Blanchon 09ddb0f824 Publish script: generate the file for arduinojson.org 2021-07-19 09:58:01 +02:00
Benoit Blanchon f02a699c26 CI: added a workflow to create a release when matching tag is pushed 2021-07-16 11:06:50 +02:00
Benoit Blanchon 67d0931c19 Added parameters to script build-arduino-package.sh 2021-07-16 09:35:32 +02:00
Benoit Blanchon 19d079c33c Removed a symlink because the Arduino Library Specification forbids it 2021-07-15 12:50:22 +02:00
Benoit Blanchon 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
Benoit Blanchon 8a9a26588c Fixed publish script 2021-07-03 16:08:36 +02:00
Benoit Blanchon 219475630a Set version to 6.18.1 2021-07-03 16:03:01 +02:00
Andreas Kuster 52e856fa6f CI: added ESP-IDF component build (closes #1599) 2021-06-30 13:34:59 +02:00
baruch cb2c029e57 Added support for ESP-IDF component build (closes #1562) 2021-06-30 10:29:28 +02:00
Benoit Blanchon ef7579394b Fixed JsonVariant::as<unsigned>() (fixes #1601) 2021-06-30 09:58:03 +02:00
Benoit Blanchon fc4f175300 CI: fixed ARM compiler installation 2021-06-28 09:10:15 +02:00
Benoit Blanchon a6fc9311b4 Added JsonArray::clear() (fixes #1597) 2021-06-26 11:29:15 +02:00
Benoit Blanchon 14639f129e CMake: added empty line at end of each file 2021-06-26 11:29:15 +02:00
Benoit Blanchon 9182c2068d Fixed build-single-header.sh (fixes #1592) 2021-06-21 16:11:02 +02:00
Benoit Blanchon cb1b3be723 CI: build single headers 2021-06-21 16:11:02 +02:00
Benoit Blanchon 5ccd62a789 Updated the readme 2021-06-18 11:39:00 +02:00
Benoit Blanchon 145d45c746 Fixed warning on Clang 10 2021-06-17 20:41:04 +02:00
Benoit Blanchon f235157466 Added support for std::string_view (closes #1578, closes #1554) 2021-06-17 20:41:04 +02:00
Benoit Blanchon ba5cdab619 Test: extracted executable Cpp11Tests 2021-06-17 20:28:09 +02:00
Benoit Blanchon eab5ae2f07 Simplified string adapters 2021-06-16 21:08:05 +02:00
Benoit Blanchon 2f0b3c0e63 VSCode: added devcontainer configuration 2021-06-16 21:08:05 +02:00
Benoit Blanchon 4e261068a1 clang-format: set IndentPPDirectives to AfterHash 2021-06-16 21:08:01 +02:00
Benoit Blanchon 1d24caf066 Added InvalidConversion to identify invalid conversions (closes #1585) 2021-06-11 11:54:52 +02:00
Benoit Blanchon dc76c5165f Fixed clang-tidy warnings (fixes #1574) 2021-06-04 12:00:33 +02:00
Benoit Blanchon de11b36a98 clang-tidy: muted "uninitialized pointer/field" in StringCopier 2021-06-04 11:38:21 +02:00
Benoit Blanchon c4a4ed5272 clang-tidy: muted "uninitialized field" in Latch 2021-06-04 11:37:07 +02:00
Benoit Blanchon a24edac5a9 clang-tidy: muted "use of memory after it is freed" in MemoryPool 2021-06-04 11:37:07 +02:00
Benoit Blanchon 9dbf44388d clang-tidy: muted "call to function is insecure" in tests 2021-06-04 11:37:07 +02:00
Benoit Blanchon 6b8e93e05e clang-tidy: fixed "uninitialized field" in VariantData 2021-06-04 11:36:20 +02:00
Benoit Blanchon 6b5239b9d5 clang-tidy: removed unused field 2021-06-04 11:16:24 +02:00
Benoit Blanchon 214c06b771 clang-tidy: fixed clang-analyzer-optin.cplusplus.UninitializedObject 2021-06-04 11:16:17 +02:00
Armandas e32a8552be CI: added clang-tidy (closes #1577) 2021-06-04 11:00:16 +02:00
Benoit Blanchon 9bcb409648 Fixed serializeJson(doc, String) when allocation fails (fixes #1572) 2021-05-30 21:34:07 +02:00
Benoit Blanchon 3b10afd2ab CI: test more platforms on PlatformIO 2021-05-30 18:45:40 +02:00
Benoit Blanchon af3bb131c8 Fixed error Pe070 "incomplete type is not allowed" on IAR (fixes #1560) 2021-05-19 15:07:59 +02:00
Benoit Blanchon 622e7dd287 Fixed support for volatile float and double (fixes #1557) 2021-05-19 15:01:51 +02:00
Benoit Blanchon 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
Benoit Blanchon 36bcc7b355 Set version to 6.18.0 2021-05-05 20:41:35 +02:00
Benoit Blanchon c7c0b729c1 Added a deprecation warning for is<char>() and is<char*>() 2021-05-05 15:43:02 +02:00
Benoit Blanchon 6aeefda3b6 CI: Skip WillFail and Fuzzing test labels when measuring coverage 2021-05-04 16:36:21 +02:00
Benoit Blanchon 4780174ee1 Added a deprecation warning for as<char>() and set(char) 2021-05-04 16:10:50 +02:00
Benoit Blanchon ab23625091 Renamed DEPRECATED to ARDUINOJSON_DEPRECATED 2021-05-04 14:44:07 +02:00
Kyle Smith a88cf8fab7 PlatformIO: set build.libArchive to false (closes #1550) 2021-05-03 08:55:20 +02:00
Benoit Blanchon 2be528a3fa serializeMsgPack(doc, p, n) doesn't add terminator anymore (fixes #1545) 2021-04-29 20:59:15 +02:00
Benoit Blanchon 337864618c Reversed parameters of convertToJson() and convertFromJson()
Now the order matches copyArray(): source first, destination second.
2021-04-28 10:25:39 +02:00
Benoit Blanchon 526cad54d7 VSCode: insert final new line 2021-04-27 18:25:42 +02:00
Benoit Blanchon 506cf7f438 Added .prettierignore 2021-04-27 18:25:42 +02:00
Benoit Blanchon 4b89878c10 Added a deprecation warning for as<char*>() 2021-04-27 18:25:42 +02:00
Benoit Blanchon 06fad301cb CI: added Valgrind job (closes #1542) 2021-04-25 20:58:22 +02:00
Benoit Blanchon 7be0c2c650 CMake: added labels to tests 2021-04-25 11:38:19 +02:00
Benoit Blanchon 43f0db45ad Updated Catch library to 1.12.2 2021-04-22 08:54:16 +02:00
Benoit Blanchon 892c37db08 Optimized JsonVariant::is<float>() 2021-04-21 13:21:40 +02:00
Benoit Blanchon d8a1d1a120 Increased coverage of ConverterImpl.hpp 2021-04-18 17:23:51 +02:00
Benoit Blanchon 64e52e97ee Removed redundant range check in MemoryPoolPrint 2021-04-18 16:47:28 +02:00
Benoit Blanchon 2a777a659a Fixed reference-binding-to-null-pointer in MsgPack deserializer 2021-04-15 14:56:59 +02:00
Benoit Blanchon 898f429826 Fixed member-call-on-null-pointer in getMember() when array is empty 2021-04-15 14:56:59 +02:00
Benoit Blanchon 88fbe3ac34 Fixed undefined behavior in JSON serializer 2021-04-15 14:56:59 +02:00
Benoit Blanchon 4ddc674846 CI: fixed sanitizers errors not been reported 2021-04-15 11:11:50 +02:00
Benoit Blanchon fc4f5fd05f Changed integer storage from positive/negative to signed/unsigned 2021-04-14 11:45:01 +02:00
Benoit Blanchon a002393716 Replaced donation link 2021-04-14 11:45:01 +02:00
Benoit Blanchon a889f6560c Added VSCode settings 2021-04-14 11:43:51 +02:00
Benoit Blanchon 4db17ecd93 CI: format YAML file with Prettier 2021-04-08 09:46:01 +02:00
Benoit Blanchon 2a57f2b365 CI: fix installation of GCC and Clang 2021-04-08 09:45:04 +02:00
George Beckstein 803e07c188 Updated folders list in .mbedignore (closes #1515) 2021-03-31 09:58:51 +02:00
Benoit Blanchon ff44d93e68 Removed buggy blank line in CHANGELOG 2021-03-29 19:35:25 +02:00
Benoit Blanchon d5d2209d09 Added "https://" prefix to all URLs so they are clickable in VS Code 2021-03-29 19:35:25 +02:00
Benoit Blanchon c81e8fc93a README: added a link to ARDUINOJSON_ENABLE_ARDUINO_STREAM 2021-03-29 18:10:00 +02:00
Benoit Blanchon 347ac422f4 Added support for Printable (closes #1444) 2021-03-27 14:35:15 +01:00
Benoit Blanchon d7f5b56ca4 Added support for custom converters (closes #687) 2021-03-20 14:52:47 +01:00
Benoit Blanchon 53d6f0d492 CI: Fixed build on Arduino 1.6.7 2021-03-19 11:50:29 +01:00
Benoit Blanchon e4ce75e20c Simplified JsonVariant::as<T>() to always return T 2021-03-08 19:33:52 +01:00
Benoit Blanchon 9094179856 CI: added a clang-format job 2021-02-26 13:13:11 +01:00
Benoit Blanchon 3aab36fec2 Changed JsonVariantConst::is<JsonArray/JsonObject>() to return false (closes #1412) 2021-02-25 19:19:23 +01:00
Benoit Blanchon 744d61f6fd Added JsonVariant::is<JsonVariant/JsonVariantConst>() (issue #1412) 2021-02-23 08:41:24 +01:00
Benoit Blanchon 05498aa178 Added JsonVariant::is<JsonVariant>() (issue #1412) 2021-02-23 08:39:58 +01:00
Benoit Blanchon b1eb273d5b Added JsonVariant::is<JsonArrayConst/JsonObjectConst>() (issue #1412) 2021-02-23 08:33:28 +01:00
Benoit Blanchon 8a3f8510d6 Simplified tests of JsonVariant::is<T>() 2021-02-23 08:27:48 +01:00
Benoit Blanchon 22904a48a6 Added a default implementation in the Visitor class 2021-02-21 13:37:07 +01:00
Benoit Blanchon 1730304f46 Funding: added paypal.me 2021-02-21 12:24:46 +01:00
Benoit Blanchon 1038fc35df Removed DeserializationError::NotSupported 2021-02-18 19:41:15 +01:00
Benoit Blanchon 71f44aaee1 deserializeMsgPack() inserts null instead of returning NotSupported 2021-02-18 19:40:25 +01:00
Benoit Blanchon cc7ebfd11e deserializeJson() leaves \uXXXX instead of returning NotSupported 2021-02-18 19:40:11 +01:00
Benoit Blanchon 54d4b308f4 Remove JsonVariant::set(char) 2021-02-18 08:48:28 +01:00
Benoit Blanchon 5234c8124b Removed JsonVariant::as<char>() (fixes #1498) 2021-02-18 08:48:10 +01:00
Benoit Blanchon e22d4bf31f Set version to 6.17.3 2021-02-15 09:53:10 +01:00
Benoit Blanchon 21f7b90f03 PlatformIO: set framework compatibility to * (closes #1490) 2021-02-15 09:49:56 +01:00
Benoit Blanchon 769e8440f5 CI: skip Particle job for Pull Requests 2021-02-05 13:00:56 +01:00
Benoit Blanchon 33de2b6cf3 Added GitHub sponsors 2021-02-05 12:03:50 +01:00
Benoit Blanchon 3975b07371 Moved CI from Travis to GitHub Actions (fixes #1493) 2021-02-03 21:33:18 +01:00
Benoit Blanchon abd64102aa Fixed compilation error on Clang 10 2021-02-03 12:56:26 +01:00
Benoit Blanchon d2174d1580 Fixed compilation error when isdigit() is a macro (fixes #1487) 2021-02-02 10:08:10 +01:00
Benoit Blanchon c72eccdd35 Added missing calls to client.stop() in JsonHttpClient.ino (fixes #1485) 2021-02-01 09:16:23 +01:00
Benoit Blanchon ab902128dc Upgrade to Lock Threads 2 2021-01-31 11:00:05 +01:00
Benoit Blanchon c70a491f59 Made JsonDocument's destructor protected (fixes #1480) 2021-01-27 10:00:10 +01:00
Benoit Blanchon 322d13de0d Examples: add a note about performance issues with streams (#1476) 2021-01-25 09:26:29 +01:00
Benoit Blanchon 97b7161d78 Update copyright notice for 2021 2021-01-25 09:14:15 +01:00
Benoit Blanchon 1360b6a396 Set version to 6.17.2 2020-11-14 10:38:21 +01:00
Benoit Blanchon 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
Benoit Blanchon aa7cc5351c Travis: added smoke test for Particle Argon 2020-11-10 14:46:45 +01:00
Benoit Blanchon 30da920135 Fixed invalid conversion in operator|(Variant, char*) (fixes #1432) 2020-11-09 09:21:19 +01:00
Benoit Blanchon bcdf5b7e52 Set version to 6.17.1 2020-11-07 10:11:41 +01:00
Benoit Blanchon c711fe592d Allowed more than 32767 values in non-embedded mode (fixes #1414) 2020-10-28 09:59:40 +01:00
Benoit Blanchon 9d5c1b3742 Added an assert to detect too large variants (issue #1414) 2020-10-24 09:39:03 +02:00
Takayuki 'January June' Suwa 6b26cd0977 Add JsonDocument to keywords.txt
see #1413
2020-10-24 09:37:16 +02:00
Benoit Blanchon 10ec0f21b0 Fixed operator|(MemberProxy, JsonObject) (fixes #1415) 2020-10-23 10:48:33 +02:00
Benoit Blanchon ff66182dc6 Gathered the tests of MemberProxy in one file 2020-10-22 09:37:05 +02:00
Benoit Blanchon d02ce2f1bb Gathered the tests of ElementProxy in one file 2020-10-22 09:37:05 +02:00
Benoit Blanchon 2664a2d0da Fixed error "ambiguous overload for operator|" (fixes #1411) 2020-10-22 09:30:31 +02:00
Benoit Blanchon 1f7350658e Set version to 6.17.0 2020-10-19 11:35:09 +02:00
Benoit Blanchon 41132b701b Fixed error "no matching function for pgm_read<double>()" on AVR 2020-10-17 14:02:26 +02:00
Benoit Blanchon 712005219c Added filtering for MessagePack (closes #1298, closes #1394) 2020-10-13 09:40:39 +02:00
Benoit Blanchon 0bd17aff8a Coverage: use -O0 instead of -Og 2020-10-11 15:10:52 +02:00
Benoit Blanchon f3f44d7812 Renamed StdStringAdapter to StlStringAdapter (internal use only) 2020-10-01 10:01:33 +02:00
Benoit Blanchon 8385d5fa3a Added wildcard key (*) for filters (closes #1309) 2020-09-28 21:11:38 +02:00
Benoit Blanchon 726f8be341 Added operator|(JsonVariantConst, JsonVariantConst) 2020-09-26 14:48:17 +02:00
Benoit Blanchon fee029b86e Moved float tables to PROGMEM 2020-09-19 16:12:49 +02:00
Benoit Blanchon c3504ddf0a Added tests for DeserializationError::f_str() 2020-09-18 19:06:21 +02:00
Benoit Blanchon 6a878ee444 Fixed error "No such file or directory WString.h" (fixes #1381) 2020-09-16 10:29:20 +02:00
Benoit Blanchon c4ec2ba88f Added DeserializationError::f_str() (issue #846) 2020-09-14 18:40:00 +02:00
Benoit Blanchon c907ca6e5d Added DeserializationError::EmptyInput 2020-09-13 10:27:29 +02:00
Benoit Blanchon 8993a093e9 Travis: run sanitizer on recent GCC version to avoid false positives 2020-09-13 10:25:34 +02:00
Benoit Blanchon d04669d0cc Fixed result of JsonVariant::set((char*)0) (fixes #1368) 2020-09-05 17:33:47 +02:00
Benoit Blanchon 05fc136915 Disabled memory sanitizer with clang 6 2020-09-05 13:44:40 +02:00
Benoit Blanchon 8d37939086 Added JsonDocument::overflowed() (closes #1358) 2020-09-05 13:44:40 +02:00
Benoit Blanchon 6d2ad4539f Simplified the implementation of parseNumber() 2020-09-04 09:23:40 +02:00
Benoit Blanchon 5ab53f42b2 Added a return value to visitors 2020-08-29 18:40:27 +02:00
Benoit Blanchon f448e805e9 Removed dead code 2020-08-25 14:36:14 +02:00
Benoit Blanchon 67aa8efd5a Added a build failure when nullptr is defined as a macro (closes #1355) 2020-08-23 09:31:40 +02:00
Benoit Blanchon 61a5273aea Set version to 6.16.1 2020-08-04 10:33:38 +02:00
Benoit Blanchon 35a39b8d8f Fixed deserializeJson() that stopped reading after {} (fixes #1335) 2020-08-04 09:52:42 +02:00
Benoit Blanchon 96b6571352 Fixed use-of-uninitialized-value in encodeCodepoint() 2020-08-03 13:44:45 +02:00
Benoit Blanchon 74e7dd053f Added memory sanitizer to fuzzers 2020-08-03 13:44:45 +02:00
Benoit Blanchon 1f8636d762 Fixed build-arduino-package.sh to ignore .vs/ 2020-08-01 15:35:04 +02:00
Benoit Blanchon e4cfa701d8 Fixed publish.sh to commit CMakeLists.txt 2020-08-01 15:34:27 +02:00
Benoit Blanchon b85181a6db Set version to 6.16.0 2020-08-01 15:17:39 +02:00
Benoit Blanchon 6841b80466 Added JsonString::operator!= 2020-07-31 14:02:20 +02:00
Benoit Blanchon 298864bafe Set ARDUINOJSON_DECODE_UNICODE to 1 by default 2020-07-30 09:49:09 +02:00
Benoit Blanchon 4d7f03836c Added a test that removes an element during iteration (#1332) 2020-07-30 09:20:31 +02:00
Benoit Blanchon c63eb80b95 Shortened the name of the private namespace using hexadecimal digits 2020-07-30 09:18:08 +02:00
Mikolaj Stawiski 0c0bf80074 Suppress IAR compiler warning. 2020-07-28 10:12:41 +02:00
Benoit Blanchon 144ff3b06e Updated the change log. Closes #1210 and closes #1314. 2020-07-26 16:09:03 +02:00
Benoit Blanchon d6c50c3596 Reduced stack usage when compiled with -Og (issue #1210)
This saves 128 bytes on ESP8266
2020-07-26 14:51:58 +02:00
Benoit Blanchon 51b177ce47 Reduced stack usage when compiled with -Og (issue #1210)
This saves 112 bytes on ESP8266
2020-07-26 12:58:12 +02:00
Benoit Blanchon 824b7a25ca Reduced stack usage when compiled with -Og (issue #1210)
This saves 96 bytes on ESP8266
2020-07-26 12:25:13 +02:00
Benoit Blanchon 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
Benoit Blanchon 4df29fbac1 Fixed "linked" strings incorrectly marked as "owned" (fixes #1318) 2020-07-24 22:25:56 +02:00
Benoit Blanchon 6dc36125c2 Added ElementProxy::getOrAddElement() (fixes #1311) 2020-07-23 10:58:47 +02:00
Benoit Blanchon 40085609e2 Fixed copyArray() not working with MemberProxy and ElementProxy 2020-07-22 21:08:18 +02:00
Benoit Blanchon ebb6d80092 Fixed copyArray() not working with String 2020-07-22 20:02:33 +02:00
Benoit Blanchon 764ff2cd53 Added string deduplication (closes #1303) 2020-07-21 20:15:31 +02:00
Benoit Blanchon 8ef226bcb8 Travis: Added Clang 9. Removed Xcode 7.3 2020-07-15 15:27:39 +02:00
Benoit Blanchon 63606c0985 Added json_fuzzer and msgpack_fuzzer in test suite 2020-07-15 12:50:00 +02:00
Benoit Blanchon 1600d39693 Refactored StringBuilder into StringStorage 2020-07-11 17:51:45 +02:00
Benoit Blanchon 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
Benoit Blanchon 7e58347fbe Added comparisons between JsonVariants 2020-07-02 15:28:34 +02:00
Benoit Blanchon 0e794a28a1 Simplified implementation of comparison operators 2020-06-13 15:42:04 +02:00
Benoit Blanchon 6fb52c3638 Set version to 6.15.2 2020-05-15 09:26:25 +02:00
Benoit Blanchon b72ef09451 Fixed publish script 2020-05-15 09:26:06 +02:00
Benoit Blanchon f7de027617 Break build if using 64-bit integers with ARDUINOJSON_USE_LONG_LONG==0 2020-05-14 10:25:10 +02:00
Benoit Blanchon bc4c2dde33 Moved failing builds to a dedicated folder 2020-05-12 18:11:55 +02:00
Benoit Blanchon 95f05dad66 Added JsonVariant as an input type for deserializeXxx() 2020-05-05 13:16:32 +02:00
Benoit Blanchon 3bb0a7aa8e Added support for enums in as<T>() and is<T>() (fixes #1256) 2020-05-04 11:13:06 +02:00
Benoit Blanchon dcf7eeef28 CMake: used link_libraries() instead of target_link_libraries() 2020-05-03 10:25:38 +02:00
Benoit Blanchon 3b923b6e4e Added support for JsonDocument to copyArray() (issue #1255) 2020-05-02 10:00:08 +02:00
Benoit Blanchon 8050f7404b CMake: gathered all build flags in a dedicated file 2020-04-28 16:02:59 +02:00
Benoit Blanchon 959b1d9e4c Fixed error C2766 with flag /Zc:__cplusplus on VS2017+ (fixes #1250) 2020-04-28 16:02:38 +02:00
Benoit Blanchon daa279d57b CMake: made project arch-independent 2020-04-11 18:49:28 +02:00
Benoit Blanchon ae9b7926a2 CMake: don't build tests when imported in another project 2020-04-11 18:49:28 +02:00
Benoit Blanchon 1f7a5e6943 Fixed links in README 2020-04-11 11:53:08 +02:00
Benoit Blanchon 9e354803de Changed publish.sh to update the CMake project version 2020-04-09 21:28:48 +02:00
Benoit Blanchon 3ea5eb3f3a Set version to 6.15.1 2020-04-08 18:23:27 +02:00
Benoit Blanchon ec43bf4fe9 Simplified the implementation of implicit casts 2020-04-08 18:18:18 +02:00
Benoit Blanchon 2097ffaabf Updated README 2020-04-08 11:16:22 +02:00
Benoit Blanchon 67e78f0751 Disabled alignment on AVR (fixes #1231) 2020-04-08 11:16:22 +02:00
Benoit Blanchon 1791dccbf2 Added CMake "install" target (closes #1209) 2020-04-07 21:43:10 +02:00
Benoit Blanchon 40d1cfe7af Fixed "pointless integer comparison" warning on IAR (issue #1233) 2020-04-06 18:20:12 +02:00
Benoit Blanchon 4627f851ca Fixed "statement is unreachable" warning on IAR (issue #1233) 2020-04-06 18:19:32 +02:00
Benoit Blanchon fc9e609ab5 Fixed "maybe-uninitialized" warning (fixes #1217) 2020-03-25 08:37:57 +01:00
Benoit Blanchon 8b3d861a9d Updated README 2020-03-23 13:39:58 +01:00
Benoit Blanchon 9ef864b27c Fixed markup in changelog 2020-03-23 11:03:30 +01:00
Benoit Blanchon 275b80a462 Updated library description 2020-03-23 11:02:58 +01:00
Benoit Blanchon 763be4f266 Set version to 6.15.0 2020-03-22 21:02:38 +01:00
Benoit Blanchon 5b812522fa Enabled debug mode when PlatformIO builds in debug 2020-03-20 20:58:08 +01:00
Benoit Blanchon 9cb0ddb5e7 Removed the copy-constructor of JsonDocument (issue #1189) 2020-03-05 13:46:45 +01:00
Benoit Blanchon 735bea1f47 Added StaticJsonDocument::garbageCollect() 2020-03-02 14:50:16 +01:00
Benoit Blanchon 0853b04589 Changed BasicJsonDocument's copy-constructor to copy the capacity 2020-03-02 12:39:29 +01:00
Benoit Blanchon c1b3705df1 Added BasicJsonDocument::garbageCollect() (issue #1195) 2020-03-01 18:01:55 +01:00
Benoit Blanchon 2540b4e01b Added move-constructor and move-assignment to BasicJsonDocument 2020-03-01 17:24:29 +01:00
Benoit Blanchon 2641697e0b Fixed incorrect string comparison on some platforms (fixes #1198) 2020-02-27 11:44:09 +01:00
Benoit Blanchon 2996503b27 Fixed enums serialized as booleans (fixes #1197) 2020-02-26 16:16:20 +01:00
Benoit Blanchon 0214c9bcad Improved coverage of JsonObject 2020-02-23 13:03:14 +01:00
Benoit Blanchon a471aed6db Improved coverage of JsonObject 2020-02-22 14:17:10 +01:00
Benoit Blanchon af0edecddb Fixed MemberProxy::set(char[]) not duplicating the string (fixes #1191) 2020-02-22 12:06:39 +01:00
Benoit Blanchon 300323cfd7 Improved coverage of JsonArray 2020-02-20 09:18:10 +01:00
Benoit Blanchon d8724e0a0b Changed the array subscript to automatically add missing elements 2020-02-20 08:59:25 +01:00
Benoit Blanchon 0001dabfd1 Improved coverage of MemoryPool 2020-02-19 17:27:04 +01:00
Benoit Blanchon ad78001241 Removed useless null checks 2020-02-19 17:22:23 +01:00
Benoit Blanchon 5a837a591e Improved coverage of MsgPackDeserializer 2020-02-19 17:14:40 +01:00
Benoit Blanchon fd79d23910 Updated copyright year 2020-02-19 16:07:34 +01:00
Benoit Blanchon 1902c0ec93 Improved coverage of JsonDeserializer 2020-02-19 10:31:56 +01:00
Benoit Blanchon 85499be855 Added tests for FlashStringAdapter 2020-02-16 17:56:47 +01:00
Benoit Blanchon e6ddfc7afb Fixed static JsonString not being saved by reference 2020-02-16 17:34:04 +01:00
Benoit Blanchon 58298ec5ba Extracted storage_policy to improve coverage in string adapters 2020-02-16 17:34:04 +01:00
Benoit Blanchon 0814fc185f Added a line-break after each "if" to get more accurate coverage report 2020-02-16 15:05:23 +01:00
Benoit Blanchon 8f8c82d400 Reduced code size 2020-02-13 17:05:08 +01:00
Benoit Blanchon 372b7d3d9d Exposed JsonPairConst 2020-02-13 16:58:23 +01:00
Benoit Blanchon fbffadb2cf Moved nesting decrement logic to class NestingLimit 2020-02-13 16:54:18 +01:00
Benoit Blanchon 6e52f242b2 Extracted the class Latch
also fixed a buffer overrun and reduced the code size
2020-02-13 14:53:54 +01:00
Benoit Blanchon d2a67f362f Fixed "deprecated-copy" warning on GCC 9 (fixes #1184) 2020-02-13 11:07:40 +01:00
Benoit Blanchon 66b12da4e7 Added DeserializationOption::Filter (closes #959) 2020-02-12 17:22:42 +01:00
Benoit Blanchon 42b0d6a83d Set version to 6.14.1 2020-01-27 15:05:36 +01:00
Benoit Blanchon 94b1c75fd2 Added getElement() and getMember() to JsonVariantConst 2020-01-27 12:35:32 +01:00
Benoit Blanchon b04b549b34 Delete .bak file produced during publish 2020-01-27 12:10:11 +01:00
Benoit Blanchon 09d4b2cd38 Fixed regression in UTF16 decoding (fixes #1173) 2020-01-27 12:10:10 +01:00
Benoit Blanchon ddfe7d8b91 Set version to 6.14.0 2020-01-16 20:48:03 +01:00
Benoit Blanchon 4a657ca87f Update the features section of the README page 2020-01-16 20:46:25 +01:00
Benoit Blanchon 1e3d478998 Improved speed of serializeXxx() when writing to a String 2020-01-14 14:50:44 +01:00
Benoit Blanchon 3aebef6d0a Fixed value returned by serializeXxx() when writing to a String 2020-01-14 11:22:44 +01:00
Benoit Blanchon 25879466da Fixed variant.is<nullptr_t>() 2020-01-13 20:47:43 +01:00
Benoit Blanchon 27ec1afb7a Configure the "lock-threads" app 2020-01-13 18:23:30 +01:00
Benoit Blanchon 06a0d1a872 Added measureJson, measureJsonPretty, and measureMsgPack to keywords 2020-01-13 18:20:05 +01:00
Benoit Blanchon 04fe7e1a27 Added ARDUINOJSON_ENABLE_COMMENTS to enable support for comments 2020-01-13 18:16:02 +01:00
Benoit Blanchon f9cfea244a Updated copyright notice 2020-01-09 15:48:38 +01:00
Benoit Blanchon 5ec062cc71 Reduced Unicode conversion code size (-122 bytes on AVR) 2020-01-09 15:39:45 +01:00
Kay Sievers 91b808381e Improved decoding of UTF-16 surrogate pairs (closes #1157) 2020-01-08 09:55:43 +01:00
Benoit Blanchon 8550418875 Auto enable std::string and stream on modern compilers (closes #1156) 2020-01-04 15:05:20 +01:00
Benoit Blanchon 00c391320c Added support for CMake's unity builds 2019-12-24 16:42:34 +01:00
Benoit Blanchon 9723682d20 AppVeyor: added Visual Studio 2019 2019-12-24 16:10:11 +01:00
Benoit Blanchon 8bf6f6e09f Added support uint8_t for serializeMsgPack() (closes #1142) 2019-12-13 14:15:30 +01:00
Benoit Blanchon 062c1c13b5 Added BasicJsonDocument::shrinkToFit() 2019-11-07 15:40:20 +01:00
Benoit Blanchon 1b8107094f Set version to 6.13.0 2019-11-01 10:32:45 +01:00
Benoit Blanchon 8721ac88b1 Reorganized writer classes 2019-10-31 19:27:23 +01:00
Benoit Blanchon 6da6f921cd Fixed dangling reference in MemberProxy and ElementProxy (fixes #1120) 2019-10-30 19:09:21 +01:00
Benoit Blanchon ef63757b1a Fixed deserializer that stopped reading at the first 0xFF (closes #1118) 2019-10-29 14:17:11 +01:00
Benoit Blanchon 3a169df0a5 Added support for custom reader classes 2019-10-25 11:39:04 +02:00
Benoit Blanchon d4f819f1f0 Added detection of Atmel AVR8/GNU C Compiler (fixes #1112) 2019-10-18 22:10:35 +02:00
Benoit Blanchon 16fe3c0acc Improved deserializeMsgPack() speed by reading several bytes at once 2019-10-14 12:02:26 +02:00
Benoit Blanchon fd8f4eb3a6 Moved msgpack.org.md to github.com/bblanchon/ArduinoJson-msgpack.org 2019-10-11 09:07:25 +02:00
baruch b261eca865 esp-idf make system 2019-10-07 09:00:31 +02:00
Benoit Blanchon a37480eec9 Fixed deserializeJson() when input contains duplicate keys (fixes #1095) 2019-09-27 10:07:29 +02:00
Benoit Blanchon 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
Benoit Blanchon 7d1d0c4e67 Added conversion from JsonArray/JsonObject to bool 2019-09-24 09:38:00 +02:00
Benoit Blanchon 4ad05dbaef Replaced GitHub stars badge 2019-09-19 09:28:57 +02:00
Benoit Blanchon 38371aae62 Added OSS-Fuzz badge 2019-09-19 09:28:49 +02:00
Benoit Blanchon 498a2e4c1e Added support for custom writer classes (closes #1088) 2019-09-13 14:10:21 +02:00
Benoit Blanchon 2078871f36 Added missing #include <ArduinoJson/Namespace.hpp> 2019-09-13 12:09:07 +02:00
Benoit Blanchon 140525b7a0 Fix deployment scripts 2019-09-05 09:36:18 +02:00
Benoit Blanchon 1a81d46a97 Set version to 6.12.0 2019-09-05 09:31:06 +02:00
Benoit Blanchon 4c4c4688a9 Fix src/ path in Makefile 2019-09-04 09:13:09 +02:00
Benoit Blanchon b47ac27ac6 Moved ancillary files to extras/ (fixes #1011) 2019-09-03 15:11:05 +02:00
Benoit Blanchon ed18e77655 Changed as<bool>() to return true for any non-null value (closes #1005) 2019-08-29 08:56:34 +02:00
Benoit Blanchon fcbec6eb6d Use absolute instead of relative includes (fixes #1072) 2019-08-26 11:57:57 +02:00
Benoit Blanchon f5c25823bc Set version to 6.11.5 2019-08-23 08:40:10 +02:00
Benoit Blanchon f00dfd7bfe Added fallbacks strlen_P, strncmp_P, strcmp_P and memcpy_P (fixes #1073) 2019-08-21 15:25:54 +02:00
Benoit Blanchon dcca4214f5 Set version to 6.11.4 2019-08-12 15:10:56 +02:00
Benoit Blanchon 1e9cc285bb Added support for basic_string<char, traits, allocator> (closes #1045) 2019-08-12 14:21:45 +02:00
Simon Arlott b9c4a0c5f6 Include Arduino.h if ARDUINO is defined (closes #1071) 2019-08-11 13:04:12 +02:00
Benoit Blanchon 0d339300f9 Added tests for Flash strings (closes #1070) 2019-08-11 11:39:21 +02:00
Benoit Blanchon 63d7d87080 Fixed example JsonConfigFile.ino for ESP8266 2019-08-10 14:17:23 +02:00
Benoit Blanchon 2ee655f9ba Fix clang installation on Travis 2019-08-10 12:22:17 +02:00
Simon Arlott 61a4195ed4 Added measureJson() to the ArduinoJson namespace (fixes #1069) 2019-08-10 11:15:11 +02:00
Benoit Blanchon a6f029ded0 Set version to 6.11.3 2019-07-22 08:59:54 +02:00
Benoit Blanchon b54de58e6b Fixed comparison of JsonVariant with mixed strings (closes #1051) 2019-07-19 12:15:16 +02:00
Benoit Blanchon 795e37278f Added operators == and != for MemberProxy 2019-07-19 10:27:03 +02:00
Benoit Blanchon 7ce1039d7c Added operators == and != for MemberProxy 2019-07-19 10:23:06 +02:00
Benoit Blanchon aba42faf69 Added operators == and != for JsonDocument 2019-07-19 10:23:06 +02:00
Benoit Blanchon 815326d42e Set version to 6.11.2 2019-07-08 08:44:27 +02:00
Benoit Blanchon 7d40a541c9 Fix invalid conversion error on Particle Argon (closes #1035) 2019-07-01 09:07:16 +02:00
Benoit Blanchon 2507ee2e56 Fixed assignment of JsonDocument to JsonVariant (issue #1023) 2019-06-25 08:56:14 +02:00
Benoit Blanchon a0a451195b Set version to 6.11.1 2019-06-21 08:49:02 +02:00
Benoit Blanchon ce247a5637 Fixed serialized() not working with Flash strings (fixes #1030) 2019-06-21 08:46:32 +02:00
Benoît Blanchon 59f9c9747f Add sponsor button on GitHub 2019-06-04 09:14:37 +02:00
Benoit Blanchon fec088e3ed Set version to 6.11.0 2019-05-26 21:11:40 +02:00
Benoit Blanchon 4980ee8fb9 Fixed unexpected HTTP/1.0 (closes #944) 2019-05-26 21:07:01 +02:00
Benoit Blanchon 2ed77d2cc3 Added support for nullptr (closes #998) 2019-05-26 11:31:51 +02:00
Benoit Blanchon 630107ae8a Removed implicit conversion in comparison operators (issue #998) 2019-05-23 21:54:42 +02:00
Benoit Blanchon 4eb8074358 Set ARDUINOJSON_ENABLE_NAN and ARDUINOJSON_ENABLE_INFINITY to 0 2019-05-19 17:46:20 +02:00
Benoit Blanchon 80a02cd90d Added ARDUINOJSON_ENABLE_INFINITY to enable Infinity in JSON 2019-05-19 15:48:27 +02:00
Benoit Blanchon 7427888e05 Added ARDUINOJSON_ENABLE_NAN to enable NaN in JSON (closes #973) 2019-05-18 12:15:36 +02:00
Benoit Blanchon 90c1d549a8 Made deserializeJson() more picky about trailing characters (closes #980) 2019-05-16 20:41:07 +02:00
Benoit Blanchon 2af003e4e2 Fixed deserializeJson() silently accepting a Stream* (issue #978) 2019-05-09 08:33:09 +02:00
Benoit Blanchon eaf55e174b Fixed invalid result from operator| (closes #981) 2019-05-07 08:12:18 +02:00
Benoit Blanchon 0588e578d5 Set version to 6.10.1 2019-04-23 08:47:54 +02:00
Benoit Blanchon 12f9aac4ea Fixed "no matching function for call to write(uint8_t)" (closes #972) 2019-04-23 08:46:18 +02:00
Benoit Blanchon 81bb3fce97 Fixed build on platformio 2019-04-21 14:35:23 +02:00
Benoit Blanchon 6011a2f51a Fixed deserializeJson() not being picky enough (fixes #969) 2019-04-21 14:35:13 +02:00
Benoit Blanchon 6071bd07ec Added a link to the FAQ 2019-04-20 12:10:29 +02:00
Benoit Blanchon 1c814d3bb6 Fixed warning on Clang 8 2019-03-24 19:39:23 +01:00
Benoit Blanchon 9862048a58 Fixed error "attributes are not allowed on a function-definition" 2019-03-24 19:00:23 +01:00
Benoit Blanchon ebc52a5a65 Travis: Added Clang 8 2019-03-24 19:00:23 +01:00
Benoit Blanchon eacad922df Travis: Added Clang 7 2019-03-24 19:00:23 +01:00
Benoit Blanchon d910996613 Travis: Added GCC 8 2019-03-24 19:00:23 +01:00
Benoit Blanchon 2fc220fa33 Fixed code samples in the README 2019-03-24 18:21:58 +01:00
Benoit Blanchon 8cabda551d Fixed publish.sh not committing appveyor.yml 2019-03-22 22:04:03 +01:00
Benoit Blanchon afd033e9c9 Set version to 6.10.0 2019-03-22 22:01:46 +01:00
Benoit Blanchon 6ec5ba521b Added JsonVariant::containsKey() 2019-03-22 21:58:12 +01:00
Benoit Blanchon c8e49a7e4e Added JsonDocument::containsKey() (issue #938) 2019-03-22 08:40:46 +01:00
Benoit Blanchon dee8c8e242 Added BasicJsonDocument to support custom allocator (issue #876) 2019-03-17 21:48:10 +01:00
Benoit Blanchon 576543c4b4 Added overflow handling in JsonVariant::as<T>() and JsonVariant::is<T>() 2019-03-06 15:31:37 +01:00
Benoit Blanchon 746f2882f7 Removed member call on null 2019-03-05 14:48:33 +01:00
Benoit Blanchon c4cbf9d0bb Don't mark as a "system header" when debugging 2019-03-05 09:19:58 +01:00
Benoit Blanchon 49bd51b5f9 Updated version in AppVeyor 2019-03-04 12:21:58 +01:00
Benoit Blanchon e53ae0f9bb Fixed the continuous integration 2019-03-04 12:18:11 +01:00
Benoit Blanchon afdd913a2f Added links to the book page in each example 2019-03-04 12:17:41 +01:00
Benoit Blanchon 3df4efd512 Set version to 6.9.1 2019-03-01 18:16:45 +01:00
Benoit Blanchon 91dd45c387 Fixed naming conflict with "CAPACITY" (issue #839) 2019-03-01 18:14:23 +01:00
Benoit Blanchon 136ee0d576 Marked ArduinoJson.h as a "system header" 2019-03-01 17:31:55 +01:00
Benoit Blanchon 1ea8d92cc3 Muted warning "will change in GCC 7.1" (issue #914) 2019-03-01 12:12:47 +01:00
Benoit Blanchon 20fcb99830 Fixed warning "conversion may alter value" (issue #914) 2019-03-01 09:15:43 +01:00
Benoit Blanchon f3265d2111 Fixed warning "cast-align" (issue #914) 2019-03-01 09:15:43 +01:00
Benoit Blanchon d6e7709866 Travis: Add g++-arm-linux-gnueabihf 2019-03-01 09:15:43 +01:00
Benoit Blanchon d11019d9e1 Travis: Split build and test scripts 2019-03-01 09:15:43 +01:00
Benoit Blanchon cfd924622e Travis: Define CC and CXX in yaml 2019-03-01 09:15:41 +01:00
Benoit Blanchon 27c08b785d Travis: Assume CMake is installed 2019-02-28 17:33:24 +01:00
Benoit Blanchon 77f38e4449 Travis: restore build on GCC 4.4 2019-02-28 16:31:08 +01:00
Benoit Blanchon 16ddfbc4e0 Fixed strict-aliasing warning in FloatTraits.hpp 2019-02-28 15:37:42 +01:00
Benoit Blanchon 8dea900869 Travis: build in Release mode 2019-02-28 15:34:32 +01:00
Benoit Blanchon f342dee2b4 Fixed warning "unused variable" with GCC 4.4 (issue #912) 2019-02-28 15:34:21 +01:00
Benoit Blanchon 1d5721f3bd Add an empty cpp file to detect warnings muted by catch.hpp 2019-02-28 15:32:29 +01:00
Benoit Blanchon 3170558d6d Added a clear error message for StaticJsonBuffer and DynamicJsonBuffer 2019-02-27 16:38:03 +01:00
Benoit Blanchon 3530aa88d6 Updated the examples on wandbox.org 2019-02-26 10:02:52 +01:00
Benoit Blanchon 21998890d4 Set version to 6.9.0 2019-02-26 08:43:45 +01:00
Benoit Blanchon c9d6bd76c9 Added JsonDocument::remove() and JsonVariant::remove() 2019-02-25 13:21:10 +01:00
Benoit Blanchon bc2ce178ea Added JsonVariant::clear() 2019-02-25 11:44:22 +01:00
Benoit Blanchon e22e62d184 Added JsonDocument::size() 2019-02-25 11:07:01 +01:00
Benoit Blanchon 4181de119c Detect IncompleteInput in false, true, and null 2019-02-18 16:18:11 +01:00
Benoit Blanchon 56bf24e1ec Fixed JsonVariant::isNull() not returning true after set((char*)0) 2019-02-18 16:04:51 +01:00
Benoit Blanchon e9b4c6289b Disambiguated the name get() with getElement() and getMember() 2019-02-15 15:53:53 +01:00
Benoit Blanchon 7ed92bebd3 Converted JsonArray::copyFrom()/copyTo() to free functions copyArray() 2019-02-15 15:33:04 +01:00
Benoit Blanchon c3f71c1a99 Updated copyright year to 2019 2019-02-15 13:32:04 +01:00
Benoit Blanchon 7050ef675d Decode escaped Unicode characters like \u00DE (issue #304, PR #791) 2019-02-15 13:29:30 +01:00
Benoit Blanchon 070cd5b6c0 Added more tests of JsonVariant::is<T>() 2019-02-01 11:28:27 +01:00
Benoit Blanchon 2c2cc33c94 Updated version in Arduino Library badge 2019-01-30 16:42:21 +01:00
Benoit Blanchon 169c83431c Set version to 6.8.0-beta 2019-01-30 16:39:38 +01:00
Benoit Blanchon 5f72c68d87 Updated publish script for the "ardu-badge" 2019-01-30 15:23:55 +01:00
Benoit Blanchon b184af6d00 User can now use a JsonString as a key or a value 2019-01-29 17:00:11 +01:00
Benoit Blanchon 6f55d1e58f JsonVariant automatically promotes to JsonObject or JsonArray on write 2019-01-29 14:09:09 +01:00
Benoit Blanchon 5aea1363cc Merge branch 'master' into 6.x 2019-01-24 21:07:02 +01:00
Gil Maimon 0685a36f0e Added ArduBadge badge 2019-01-24 20:55:55 +01:00
Benoit Blanchon 70739f5cfd Reduced the size of the pretty JSON serializer 2019-01-23 18:19:24 +01:00
Benoit Blanchon 933a66a070 Added JsonDocument::operator[] 2019-01-23 11:43:29 +01:00
Benoit Blanchon 4167b11434 Create or assign a JsonDocument from a JsonArray/JsonObject/JsonVariant 2019-01-23 10:47:20 +01:00
Benoit Blanchon 2a3b51ac3a Fixed uninitialized variant in JsonDocument 2019-01-20 14:35:22 +01:00
Benoit Blanchon e633292df1 Replaced JsonDocument::nestingLimit with a param to deserializeJson() 2019-01-19 14:45:16 +01:00
Benoit Blanchon 30b94493bb Added nesting() to JsonArray, JsonDocument, JsonObject, and JsonVariant 2019-01-17 09:55:51 +01:00
Benoit Blanchon c51cc91f92 Added memoryUsage() to JsonArray, JsonObject, and JsonVariant 2019-01-16 09:50:57 +01:00
Benoit Blanchon 8b04046321 Import JsonDocument into the ArduinoJson namespace 2019-01-15 12:04:48 +01:00
Benoit Blanchon 11bb5e26ff Fixed copying from JsonObjectConst and JsonArrayConst 2019-01-14 11:17:57 +01:00
Benoit Blanchon 9ac2ac303c Removed default capacity of DynamicJsonDocument 2019-01-14 10:32:19 +01:00
Benoit Blanchon f0784d3b41 Simplified deserializeJson() and deserializeMsgPack() 2019-01-04 12:33:39 +01:00
Benoit Blanchon 3d8ece8c8b Improved syntax highlighting in Arduino IDE 2018-12-14 17:35:40 +01:00
Benoit Blanchon b0fb71f7d8 Import functions in the ArduinoJson namespace to get clearer errors 2018-12-14 17:34:49 +01:00
Benoit Blanchon a5cd1b1693 Set version to 6.7.0-beta 2018-12-07 12:23:02 +01:00
Benoit Blanchon d8a1eec530 Renamed JsonKey to JsonString 2018-12-07 12:08:30 +01:00
Benoit Blanchon e20c47c57b DynamicJsonDocument reallocates memory pool is it's too small 2018-12-07 10:38:58 +01:00
Benoit Blanchon b77b203935 Extracted VariantData and CollectionData classes 2018-12-07 09:16:58 +01:00
Benoit Blanchon 1ad97ebf85 Merge branch 'master' into 6.x 2018-12-04 16:52:15 +01:00
Benoit Blanchon ef12c74771 Set version to 5.13.4 2018-12-04 11:36:16 +01:00
Benoit Blanchon 0bc03e8071 Removed spurious files in the Particle library 2018-12-04 11:19:22 +01:00
Benoit Blanchon 04286f3228 Moved size measurements to github.com/bblanchon/ArduinoJson-size 2018-12-04 10:50:45 +01:00
Benoit Blanchon 1d942cdf41 Use singly-linked list to reduce memory usage 2018-12-01 12:05:51 +01:00
Benoit Blanchon aaf0d5c3c5 Renamed and moved internal files 2018-11-30 17:53:54 +01:00
Benoit Blanchon 04e8acd844 Store offset between slots to reduce memory usage 2018-11-30 14:28:00 +01:00
Benoit Blanchon 8ff48dde73 Moved size measurements to github.com/bblanchon/ArduinoJson-size 2018-11-30 14:27:35 +01:00
Benoit Blanchon 41b2e629f7 Increased test coverage 2018-11-30 14:27:35 +01:00
Benoit Blanchon a60162ba76 Removed the indirection via StringSlot 2018-11-30 14:27:35 +01:00
Benoit Blanchon 45f4e5ac20 Restored the monotonic allocator 2018-11-30 14:27:33 +01:00
Benoit Blanchon 637f7a5bfa Removed template parameter of CharPointerReader and StringMover 2018-11-16 16:24:36 +01:00
Benoit Blanchon 399ccec645 Added a CSV showing the evolution of the size of the sample programs 2018-11-16 15:08:53 +01:00
Benoit Blanchon 2bd280df80 Removed the automatic expansion of DynamicJsonDocument 2018-11-16 10:26:59 +01:00
Benoit Blanchon c832edbda3 Added script to compile samples on wandbox.org 2018-11-14 18:02:01 +01:00
Benoit Blanchon b8d0041851 Set version to 6.6.0-beta 2018-11-13 18:05:59 +01:00
Benoit Blanchon 0a97d4c825 Added DeserializationError::code() to be used in switch statements (closes #846) 2018-11-13 14:31:53 +01:00
Benoit Blanchon 5eee947ffe Increased test coverage of MessagePack serialization 2018-11-12 21:36:39 +01:00
Benoit Blanchon 720e6548c7 Replacing a value now releases the memory 2018-11-12 18:28:34 +01:00
Benoit Blanchon f375459d53 JsonArray::remove() and JsonObject::remove() now release the memory of strings 2018-11-09 18:20:57 +01:00
Henry Zhang e842838a23 fix a spelling error of JsonParserExample.ino 2018-10-25 17:22:23 +02:00
Benoit Blanchon 00aa038818 Added executable msgpack_fuzzer 2018-10-19 19:42:15 +02:00
Benoit Blanchon eb78077a0c Travis: Added fuzzing corpus to the cache 2018-10-19 19:40:54 +02:00
Benoit Blanchon d8d939660b JsonArray::remove() and JsonObject::remove() now release the memory of the variant 2018-10-19 19:40:21 +02:00
Benoit Blanchon ae089dcff7 Merged the two StringBuilder classes into one 2018-10-18 17:54:33 +02:00
Benoit Blanchon 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
Benoit Blanchon 4eee8e8bdf Reduced code size 2018-10-18 11:15:32 +02:00
Benoit Blanchon 9f1421e0a6 Set version to 6.5.0-beta 2018-10-13 13:23:34 +02:00
Benoit Blanchon 84f199f0dd Added copy-constructor and copy-assignment-operator for JsonDocument (issue #827) 2018-10-13 13:21:30 +02:00
Benoit Blanchon 8230f8fc9b Restored JsonVariantLocal to fix the use-after-free 2018-10-12 20:00:49 +01:00
Benoit Blanchon 02d809f3f4 Added Visitable to reduce the number of definitions of operator<< 2018-10-12 17:59:50 +02:00
Benoit Blanchon b0560cbd99 Added JsonArrayConst, JsonObjectConst, and JsonVariantConst 2018-10-12 12:00:27 +02:00
Benoit Blanchon d1003ff6c9 Simplified string handling in JsonObject 2018-10-10 09:18:36 +02:00
Benoit Blanchon b11ad4077b Merge branch 'master' into 6.x 2018-10-09 15:00:49 +02:00
Benoit Blanchon 5dc7dc1216 Increased the default capacity of DynamicJsonDocument 2018-10-08 18:32:58 +02:00
Benoit Blanchon 0d4a93018b Set version to 5.13.3 2018-10-06 17:50:41 +02:00
Benoit Blanchon 3ca40db9f8 Added a coupon code for the book 2018-10-06 17:42:01 +02:00
Benoit Blanchon ce607196d1 Travis: update osx images 2018-10-06 17:24:54 +02:00
Benoit Blanchon 0b3af166ae Fixed JsonVariant::is<String>() (closes #763) 2018-10-06 17:21:16 +02:00
Benoit Blanchon 39e5660c4a Extracted a base class for JsonDocument 2018-10-04 14:59:07 +02:00
Benoit Blanchon 6b985b2d1f Fixed object keys not being duplicated 2018-10-04 11:16:23 +02:00
Benoit Blanchon 527dc19794 Allow mixed configuration in compilation units (issue #809) 2018-10-02 16:54:05 +02:00
Benoit Blanchon 29e71cbb16 Added implicit conversion from JsonArray and JsonObject to JsonVariant 2018-10-01 12:55:40 +02:00
Benoit Blanchon 2d54019f83 Set version to 6.4.0-beta 2018-09-11 16:31:04 +02:00
Benoit Blanchon 98c8e8e35a Added a test for issue #808 2018-09-11 16:21:30 +02:00
Benoit Blanchon b106b1ed14 Copy JsonArray and JsonObject, instead of storing pointers (fixes #780) 2018-09-11 16:06:08 +02:00
Benoit Blanchon 2998a55f0b Renamed JsonBuffer to MemoryPool 2018-09-03 16:14:21 +02:00
Benoit Blanchon e5c4778ff7 Updated publish script 2018-08-31 17:04:22 +02:00
Benoit Blanchon 2ec9569b36 Set version to 6.3.0-beta 2018-08-31 16:57:14 +02:00
Benoit Blanchon 58303d0837 Added date in change log 2018-08-31 16:38:42 +02:00
Benoit Blanchon e3639918eb Reduced executable size 2018-08-31 16:29:08 +02:00
Benoit Blanchon 6d290bd001 Fixed duplication of char* 2018-08-22 14:37:17 +02:00
Benoit Blanchon 7683667b3c Fixed serializeJson(obj[key], dst) (closes #794) 2018-08-21 18:07:41 +02:00
Benoit Blanchon 9cbc891816 Implemented reference semantics for JsonVariant 2018-08-21 17:56:16 +02:00
Benoit Blanchon 0454bd1ef6 Set version to 6.2.3-beta 2018-07-19 18:28:03 +02:00
Benoit Blanchon f139100b23 Added a script to update the version number 2018-07-19 18:27:44 +02:00
Benoit Blanchon 3f666bd5f0 Fixed exception when using Flash strings as object keys (fixes #784) 2018-07-19 17:22:28 +02:00
Benoit Blanchon d53a93e0ae Set version to 6.2.2-beta 2018-07-18 20:21:00 +02:00
Benoit Blanchon 2059d610a8 Fixed invalid application of 'sizeof' to incomplete type (closes #783) 2018-07-18 20:19:22 +02:00
Benoit Blanchon 9bbfbd0a6a Set version to 6.2.1-beta 2018-07-17 10:27:04 +02:00
Benoit Blanchon 6e4f1dc756 Fixed JsonObject not inserting keys of type String (fixes #782) 2018-07-17 10:24:21 +02:00
Benoit Blanchon dc13882624 Update badges to show status of branch 6.x 2018-07-12 11:01:26 +02:00
Benoit Blanchon 6bb17d5896 Checked that issue issue #628 is fixed 2018-07-12 10:33:56 +02:00
Benoit Blanchon 1a513cbd16 Set version to 6.2.0-beta 2018-07-12 09:10:13 +02:00
Benoit Blanchon 87fa87d87b Renamed function RawJson() to serialized() 2018-07-12 09:08:20 +02:00
Benoit Blanchon fa1a40ac6e Fixed JsonVariant::is<int>() that returned true for empty strings 2018-07-05 09:53:11 +02:00
Benoit Blanchon 954428e341 Improved float serialization when -fsingle-precision-constant is used 2018-07-05 09:48:57 +02:00
Benoit Blanchon 765752261c Improved float serialization when -fsingle-precision-constant is used 2018-07-04 12:07:03 +02:00
Benoit Blanchon 037f90aada Disabled lazy number deserialization (fixes #772) 2018-07-04 12:02:58 +02:00
Benoit Blanchon 1397bec066 Set version to 6.1.0-beta 2018-07-02 09:54:35 +02:00
Benoit Blanchon b105e6f7c4 Return JsonArray and JsonObject by value (closes #309) 2018-07-02 09:35:21 +02:00
Benoit Blanchon 4fe2b1100e Set version to 6.0.1-beta 2018-06-11 12:24:33 +02:00
Benoit Blanchon c3403ed72d Fixed conflicts with isnan() and isinf() macros (fixes #752) 2018-06-11 12:21:50 +02:00
Benoit Blanchon 393f352b70 Minor changes in the examples 2018-06-07 11:21:54 +02:00
Benoit Blanchon e86eb0cfdf Set version to 6.0.0-beta 2018-06-07 10:50:10 +02:00
Benoit Blanchon a9a730fd74 Added MessagePack fuzzing 2018-06-07 10:36:57 +02:00
Benoit Blanchon 4ff6809bc5 Merge branch 'master' into 6.x 2018-06-07 09:32:55 +02:00
Benoit Blanchon 7b229e4c38 Added fuzzing to travis 2018-06-06 11:20:49 +02:00
Benoit Blanchon 9ac9b533b6 Added clang 3.9, 4.0, 5.0 and 6.0 to travis 2018-06-05 20:55:53 +02:00
Benoit Blanchon f53fc3e06f Added MessagePack in README 2018-06-04 17:48:10 +02:00
Benoit Blanchon 0139354780 Merge branch 'master' into 6.x 2018-06-04 17:46:34 +02:00
Benoit Blanchon 011aac43d2 Set version to 5.13.2 2018-06-01 09:21:42 +02:00
Benoit Blanchon eb20ae6a3f Added macros ARDUINOJSON_VERSION, ARDUINOJSON_VERSION_MAJOR... 2018-06-01 09:19:34 +02:00
Benoit Blanchon 7c0af91844 Fixed null values that could be pass to strcmp() (closes #745) 2018-06-01 09:08:38 +02:00
Benoit Blanchon fc2e3a4ab3 Added serializeMsgPack() and measureMsgPack() (closes #358) 2018-05-29 08:31:39 +02:00
Benoit Blanchon 58cb793c96 Reorganized polyfills 2018-05-17 13:46:23 +02:00
Benoit Blanchon 4592f23260 Merged MsgPackError and JsonError into DeserializationError.
Return NotSupported if the JSON input contains "\u".
2018-05-15 18:23:09 +02:00
Benoit Blanchon ccb54136a2 Added support for non zero-terminated strings (fixes #704) 2018-05-14 17:12:59 +02:00
Benoit Blanchon 4c9c047ddf Made nestingLimit a member of the document 2018-04-18 21:42:30 +02:00
Benoit Blanchon 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
Benoit Blanchon a13b9e8bdc Added example MsgPackParser.ino (issue #358) 2018-04-10 17:55:51 +02:00
Benoit Blanchon cb723840d9 Added deserializeMsgPack() (issue #358) 2018-04-10 17:43:27 +02:00
Benoit Blanchon 923d3e8a84 Removed friend relationship between JsonVariant and JsonSerializer 2018-03-23 09:20:50 +01:00
Benoit Blanchon 0d1623edef Clear the JsonObject or JsonArray in deserializeJson() 2018-03-18 14:50:52 +01:00
Benoit Blanchon cf149940ed Moved JsonBuffer to Memory/ 2018-03-15 16:51:07 +01:00
Benoit Blanchon ef55a6ba7c Removed all deprecated features 2018-03-15 16:50:39 +01:00
Benoit Blanchon 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
Benoit Blanchon 3523296e3d Fixed JsonBuffer::parse() nesting limit (fixes #693) 2018-03-12 18:29:33 +01:00
Benoit Blanchon b2a8085651 Added JsonError 2018-03-09 16:58:01 +01:00
Benoit Blanchon 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
Benoit Blanchon 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
Benoit Blanchon baf5adcf33 Set version to 6.0.0 2018-02-26 16:00:44 +01:00
Benoit Blanchon 689ae5c08d Set version to 5.13.1 2018-02-19 08:56:17 +01:00
Benoit Blanchon d9b1e7e810 Allowed non-quoted key to contain underscores (fixes #665) 2018-02-16 11:04:07 +01:00
Benoit Blanchon b4eece01f8 Fixed JsonVariant::operator|(int) to accept double (fixes #675) 2018-02-09 09:05:29 +01:00
Benoit Blanchon cf5396aaed Set version to 5.13.0 2018-01-19 15:35:19 +01:00
Benoit Blanchon e390587e91 Kept only two namespaces ArduinoJson and ArduinoJson::Internals 2018-01-19 08:32:15 +01:00
Benoit Blanchon bae179ed67 RawJson() accepts any kind of string and obeys to duplication rules 2018-01-18 09:43:37 +01:00
Benoit Blanchon 7e4fcb0868 Add repository and license in library.properties (closes #662) 2018-01-15 10:24:51 +01:00
Benoit Blanchon fbfdca1de9 Added campaign information in links 2018-01-15 10:22:04 +01:00
Benoit Blanchon 0612eef69b Marked strdup() as deprecated (issue #658) 2018-01-14 14:02:10 +01:00
Benoit Blanchon ae0b7a3ebd Changed the return type of strdup() to const char* (issue #658) 2018-01-14 14:01:08 +01:00
Benoit Blanchon e92612b511 Changed the rules of string duplication (fixes #658) 2018-01-14 13:46:28 +01:00
Benoit Blanchon 5c33fd4b94 Set copyright year to 2018 2018-01-05 09:20:01 +01:00
Benoit Blanchon c3f51e2980 Updated links to arduinojson.org 2018-01-05 09:17:24 +01:00
Benoit Blanchon de47c0af9e Updated links to the book 2017-12-27 14:15:49 +01:00
Benoit Blanchon e53e4e3dd9 Fixed typos 2017-12-15 17:52:47 +01:00
Benoit Blanchon 36fe6535c4 Reworked the readme 2017-12-15 17:52:13 +01:00
Benoit Blanchon b55e57a7cf Set version to 5.12.0 2017-12-11 17:50:18 +01:00
Benoit Blanchon 7626db624e Changed all link to point to HTTPS version 2017-12-11 17:26:50 +01:00
Benoit Blanchon 6d8329b255 Added an example that shows how to save and load a configuration file 2017-12-11 17:20:27 +01:00
Benoit Blanchon 461e30148c Reworked all examples 2017-12-11 15:19:28 +01:00
Benoit Blanchon 57d98e48f7 Added detection of Keil ARM Compiler (issue #629) 2017-12-05 21:24:28 +01:00
Benoit Blanchon cf2babc598 Added detection of MPLAB XC compiler (issue #629) 2017-12-05 21:18:21 +01:00
Benoit Blanchon d10277df31 Added a clear error message when compiled as C (issue #629) 2017-12-03 13:49:51 +01:00
Benoit Blanchon d3a1203782 Added JsonVariant::operator| to return a default value 2017-11-29 09:49:40 +01:00
Benoit Blanchon 126f7ab819 Rewrote example JsonHttpClient.ino (fixes #600) 2017-11-13 16:17:44 +01:00
Benoit Blanchon 221c2861fc Changed all links to point to arduinojson.org 2017-11-07 20:42:50 +01:00
Benoit Blanchon 66667382e1 Added Alexander Wilms to the list of donators 2017-11-01 09:19:40 +01:00
Benoit Blanchon a7e928d126 Set version to 5.11.2 2017-10-17 10:21:52 +02:00
Benoit Blanchon 591fe7e92b Fixed incorrect rounding for float values (fixes #588) 2017-10-17 10:19:21 +02:00
Benoit Blanchon d6e61cbcda Added banner with the new logo 2017-10-16 10:21:44 +02:00
Benoit Blanchon 5825366fe4 Added Patrick Elliott to the list of donators 2017-10-07 16:33:53 +02:00
Benoit Blanchon 6df204cf40 Split CONTRIBUTING and SUPPORT 2017-10-03 13:01:47 +02:00
Benoit Blanchon 3f7e1db549 Added guidelines for contributing 2017-10-03 12:26:49 +02:00
Benoit Blanchon a6091136b0 Fix GCC 7 warning 2017-09-27 11:13:45 +02:00
Benoit Blanchon 353bbd0e8c Fix GCC 4.8.5 warning 2017-09-27 09:45:48 +02:00
Benoit Blanchon a428e125fa Travis: Added GCC 7 2017-09-27 09:29:08 +02:00
Benoit Blanchon 2e262b2689 Travis: Removed GCC 4.5 2017-09-27 09:29:08 +02:00
Benoit Blanchon a2d055e408 Added Günther Jehle to the list of donators 2017-09-26 09:43:32 +02:00
Benoit Blanchon 57defe00ee Fixed DynamicJsonBuffer::clear() not resetting allocation size (fixes #561) 2017-08-30 21:51:10 +02:00
Benoit Blanchon ac5a2676e7 Upgraded to Catch 1.9.7 2017-08-27 15:12:20 +02:00
Benoit Blanchon ed98ea4e43 Implemented JsonVariant comparisons with template friends 2017-08-06 16:26:38 +02:00
Benoit Blanchon 729bf0afd2 Made JsonBuffer destructor protected 2017-07-18 22:00:06 +02:00
Benoit Blanchon 2ea7ea153c Set version to 5.11.1 2017-07-14 11:17:11 +02:00
Benoit Blanchon 2772e66064 Fixed warning "this statement may fall through" (issue #539) 2017-07-14 11:14:56 +02:00
Benoit Blanchon d41f7a8165 Fixed too many decimals places in float serialization (issue #543) 2017-07-14 10:51:46 +02:00
Benoit Blanchon abfd3997eb Fixed "constant exceeds range of float [-Woverflow]" (issue #544) 2017-07-09 15:24:58 +02:00
Benoit Blanchon 788c9be016 Removed dependency on PGM_P as Particle 0.6.2 doesn't define it (issue #546) 2017-07-07 23:04:42 +02:00
Benoit Blanchon c3d7a79a83 Travis: Removed Arduino DUE on platformio (fatal error: Ethernet.h: No such file or directory) 2017-07-06 20:56:05 +02:00
Benoit Blanchon 1782348275 Added Charles Walker to the list of donators 2017-07-06 20:55:05 +02:00
Benoit Blanchon edfe5c6622 Set version to 5.11.0 2017-06-25 15:11:57 +02:00
Benoit Blanchon 2b9492317b Added Charles Haynes to the list of donators 2017-06-22 21:56:41 +02:00
Benoit Blanchon 5da41edf6a Removed implementation of JsonBufferAllocated::delete. 2017-06-19 10:05:38 +02:00
Benoit Blanchon 476e5aaa86 Added DynamicJsonBuffer::clear() 2017-06-17 16:48:40 +02:00
Benoit Blanchon 789fa507b5 Added StaticJsonBuffer::clear() 2017-06-17 15:00:46 +02:00
Benoit Blanchon 508f936317 Made JsonBuffer non-copyable (PR #524 by @luisrayas3) 2017-06-17 14:17:01 +02:00
593 changed files with 50835 additions and 23638 deletions
+8 -1
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
+4
View File
@@ -0,0 +1,4 @@
github: bblanchon
custom:
- https://arduinojson.org/book/
- https://donate.benoitblanchon.fr/
-14
View File
@@ -1,14 +0,0 @@
<!--
Before opening an issue, please read the FAQ:
https://bblanchon.github.io/ArduinoJson/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
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
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.
+19
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
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]
```
+586
View File
@@ -0,0 +1,586 @@
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: "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
- name: Checkout
uses: actions/checkout@v3
- 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
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
+76
View File
@@ -0,0 +1,76 @@
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 }}
- name: Publish
run: bash -eux extras/scripts/publish-particle-library.sh
+12 -3
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/
+1 -4
View File
@@ -1,6 +1,3 @@
.github/
examples/
fuzzing/
scripts/
test/
third-party/
extras/
+1
View File
@@ -0,0 +1 @@
*.md
-98
View File
@@ -1,98 +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.5']
env: SCRIPT=cmake GCC=4.5
- 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 SANITIZE=undefined
- compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-6']
env: SCRIPT=cmake GCC=6
- 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=due
- env: SCRIPT=platformio BOARD=esp01
#- env: SCRIPT=platformio BOARD=teensy31C
cache:
directories:
- "~/.platformio"
script: scripts/travis/$SCRIPT.sh
+18
View File
@@ -0,0 +1,18 @@
{
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"cmake.generator": "Ninja",
"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,
}
}
+2 -5
View File
@@ -1,8 +1,5 @@
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
#include "src/ArduinoJson.h"
+813 -470
View File
File diff suppressed because it is too large Load Diff
+20 -14
View File
@@ -1,19 +1,25 @@
# Copyright Benoit Blanchon 2014-2017
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
#
# Arduino JSON library
# https://bblanchon.github.io/ArduinoJson/
# If you like this project, please add a star!
cmake_minimum_required(VERSION 3.0)
project(ArduinoJson)
cmake_minimum_required(VERSION 3.15)
enable_testing()
if(${COVERAGE})
set(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
if(ESP_PLATFORM)
# Build ArduinoJson as an ESP-IDF component
idf_component_register(INCLUDE_DIRS src)
return()
endif()
include_directories(${CMAKE_CURRENT_LIST_DIR}/src)
add_subdirectory(third-party/catch)
add_subdirectory(test)
project(ArduinoJson VERSION 6.21.0)
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()
+10
View File
@@ -0,0 +1,10 @@
# Contribution to ArduinoJson
First, thank you for taking the time to contribute to this project.
You can submit changes via GitHub Pull Requests.
Please:
1. Update the test suite for any change of behavior
2. Use clang-format in "file" mode to format the code
+10 -10
View File
@@ -1,10 +1,10 @@
The MIT License (MIT)
---------------------
Copyright © 2014-2017 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.
+131 -93
View File
@@ -1,123 +1,161 @@
ArduinoJson - C++ JSON library for IoT
====================
<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)
---
*An elegant and efficient JSON library for embedded systems.*
[![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.0&logo=arduino&logoColor=white&color=blue)](https://www.ardu-badge.com/ArduinoJson/6.21.0)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/bblanchon/library/ArduinoJson.svg?version=6.21.0)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.21.0)
[![ESP IDF](https://img.shields.io/static/v1?label=ESP+IDF&message=v6.21.0&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)
It's designed to have the most intuitive API, the smallest footprint and is able to work without any allocation on the heap (no malloc).
ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
It has been written with Arduino in mind, but it isn't linked to Arduino libraries so you can use this library in any other C++ project.
For instance, it supports Aduino's `String` and `Stream`, but also `std::string`, `std::istream` and `std::ostream`.
## Features
Features
--------
* [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 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)
* JSON decoding (comments are supported)
* JSON encoding (with optional indentation)
* Elegant API, very easy to use
* Fixed memory allocation (zero malloc)
* No data duplication (zero copy)
* Portable (written in C++98)
* Self-contained (no external dependency)
* Small footprint
* Header-only library
* MIT License
## Quickstart
Works on
--------
### Deserialization
* Arduino boards: Uno, Due, Mini, Micro, Yun...
* ESP8266, ESP32
* Teensy
* RedBearLab boards (BLE Nano...)
* Intel Edison and Galileo
* WeMos boards: D1...
* Computers: Windows, Linux, OSX...
* PlatformIO
* Particle
* Energia
Quick start
-----------
#### Decoding / Parsing
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 JsonParserExample.ino](examples/JsonParserExample/JsonParserExample.ino)
See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/deserialization/)
Use [ArduinoJson Assistant](https://bblanchon.github.io/ArduinoJson/assistant/) to compute the buffer size.
### Serialization
#### Encoding / Generating
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 JsonGeneratorExample.ino](examples/JsonGeneratorExample/JsonGeneratorExample.ino)
See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/serialization/)
Use [ArduinoJson Assistant](https://bblanchon.github.io/ArduinoJson/assistant/) to compute the buffer size.
## Sponsors
ArduinoJson is thankful to its sponsors. Please give them a visit; they deserve it!
Documentation
-------------
<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>
The documentation is available online in the [ArduinoJson Website](https://bblanchon.github.io/ArduinoJson/).
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.
The [ArduinoJson Assistant](https://bblanchon.github.io/ArduinoJson/assistant/) helps you get started with the library.
Donators
--------
Special thanks to the following persons and companies who made generous donations to the library author:
* Robert Murphy <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Surge Communications <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Alex Scott <img alt='United Kingdom' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1e7.svg' width='18' height='18'>
* Firepick Services LLC <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* A B Doodkorte <img alt='Netherlands' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width='18' height='18'>
* Scott Smith <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Johann Stieger <img alt='Austria' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e6-1f1f9.svg' width='18' height='18'>
* Gustavo Donizeti Gini <img alt='Brazil' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e7-1f1f7.svg' width='18' height='18'>
* Charles-Henri Hallard <img alt='France' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1eb-1f1f7.svg' width='18' height='18'>
* Martijn van den Burg <img alt='Netherlands' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width='18' height='18'>
* Nick Koumaris <img alt='Greece' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1f7.svg' width='18' height='18'>
* Jon Williams <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Kestutis Liaugminas <img alt='Lithuania' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f1-1f1f9.svg' width='18' height='18'>
* Darlington Adibe <img alt='Nigeria' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1ec.svg' width='18' height='18'>
* Yoeri Kroon <img alt='Netherlands' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width='18' height='18'>
* Andrew Melvin <img alt='United Kingdom' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1e7.svg' width='18' height='18'>
* Doanh Luong <img alt ='Vietnam' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fb-1f1f3.svg' width='18' height='18'>
* Christoph Schmidt <img alt='Germany' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e9-1f1ea.svg' width='18' height='18'>
* OpenEVSE LLC <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Prokhoryatov Alexey <img alt='Russia' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f7-1f1fa.svg' width='18' height='18'>
* Google Inc. <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
---
Found this library useful? Please star this project or [help me back with a donation!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donate%40benoitblanchon%2efr&lc=GB&item_name=Benoit%20Blanchon&item_number=Arduino%20JSON&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) :smile:
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;⭐.
+27
View File
@@ -0,0 +1,27 @@
# ArduinoJson Support
First off, thank you very much for using ArduinoJson.
We'll be very happy to help you, but first please read the following.
## Before asking for help
1. Read the [FAQ](https://arduinojson.org/faq/?utm_source=github&utm_medium=support)
2. Search in the [API Reference](https://arduinojson.org/api/?utm_source=github&utm_medium=support)
If you did not find the answer, please create a [new issue on GitHub](https://github.com/bblanchon/ArduinoJson/issues/new).
It is OK to add a comment to a currently opened issue, but please avoid adding comments to a closed issue.
## Before hitting the Submit button
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!
+22 -14
View File
@@ -1,20 +1,28 @@
version: 5.10.1.{build}
version: 6.21.0.{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 .
+1
View File
@@ -0,0 +1 @@
COMPONENT_ADD_INCLUDEDIRS := src
+160
View File
@@ -0,0 +1,160 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to store your project configuration in a file.
// It uses the SD library but can be easily modified for any other file-system.
//
// The file contains a JSON document with the following content:
// {
// "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>
// 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;
};
const char *filename = "/config.txt"; // <- SD library uses 8.3 filenames
Config config; // <- global configuration object
// Loads the configuration from a file
void loadConfiguration(const char *filename, Config &config) {
// Open file for reading
File file = SD.open(filename);
// 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;
// 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 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 (Curiously, File's destructor doesn't close the file)
file.close();
}
// Saves the configuration to a file
void saveConfiguration(const char *filename, const Config &config) {
// Delete existing file, otherwise the configuration is appended to the file
SD.remove(filename);
// Open file for writing
File file = SD.open(filename, FILE_WRITE);
if (!file) {
Serial.println(F("Failed to create file"));
return;
}
// 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;
// Set the values in the document
doc["hostname"] = config.hostname;
doc["port"] = config.port;
// Serialize JSON to file
if (serializeJson(doc, file) == 0) {
Serial.println(F("Failed to write to file"));
}
// Close the file
file.close();
}
// Prints the content of a file to the Serial
void printFile(const char *filename) {
// Open file for reading
File file = SD.open(filename);
if (!file) {
Serial.println(F("Failed to read file"));
return;
}
// Extract each characters by one by one
while (file.available()) {
Serial.print((char)file.read());
}
Serial.println();
// Close the file
file.close();
}
void setup() {
// Initialize serial port
Serial.begin(9600);
while (!Serial) continue;
// Initialize SD library
const int chipSelect = 4;
while (!SD.begin(chipSelect)) {
Serial.println(F("Failed to initialize SD library"));
delay(1000);
}
// Should load default config if run for the first time
Serial.println(F("Loading configuration..."));
loadConfiguration(filename, config);
// Create configuration file
Serial.println(F("Saving configuration..."));
saveConfiguration(filename, config);
// Dump config file
Serial.println(F("Print config file..."));
printFile(filename);
}
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
// --------
//
// 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.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
@@ -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
const __FlashStringHelper* 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 ❤❤❤❤❤
@@ -1,60 +1,54 @@
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
// This example shows how to generate a JSON document with ArduinoJson.
//
// https://arduinojson.org/v6/example/generator/
#include <ArduinoJson.h>
void setup() {
// Initialize Serial port
Serial.begin(9600);
while (!Serial) {
// wait serial port initialization
}
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.
// If the JSON object is more complex, you need to increase that value.
// See https://bblanchon.github.io/ArduinoJson/assistant/
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,
@@ -68,3 +62,16 @@ void setup() {
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
// serialization problem.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
+95 -153
View File
@@ -1,184 +1,126 @@
// Sample Arduino Json Web Client
// Downloads and parse http://jsonplaceholder.typicode.com/users/1
//
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
// 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 https://arduinojson.org/example.json
// Here is the expected response:
// {
// "sensor": "gps",
// "time": 1351824120,
// "data": [
// 48.756080,
// 2.302038
// ]
// }
//
// https://arduinojson.org/v6/example/http-client/
#include <ArduinoJson.h>
#include <Ethernet.h>
#include <SPI.h>
EthernetClient client;
const char* server = "jsonplaceholder.typicode.com"; // server's address
const char* resource = "/users/1"; // http resource
const unsigned long BAUD_RATE = 9600; // serial connection speed
const unsigned long HTTP_TIMEOUT = 10000; // max respone time from server
const size_t MAX_CONTENT_SIZE = 512; // max size of the HTTP response
// The type of data that we want to extract from the page
struct UserData {
char name[32];
char company[32];
};
// ARDUINO entry point #1: runs once when you press reset or power the board
void setup() {
initSerial();
initEthernet();
}
// Initialize Serial port
Serial.begin(9600);
while (!Serial) continue;
// ARDUINO entry point #2: runs over and over again forever
void loop() {
if (connect(server)) {
if (sendRequest(server, resource) && skipResponseHeaders()) {
UserData userData;
if (readReponseContent(&userData)) {
printUserData(&userData);
}
}
}
disconnect();
wait();
}
// Initialize Serial port
void initSerial() {
Serial.begin(BAUD_RATE);
while (!Serial) {
; // wait for serial port to initialize
}
Serial.println("Serial ready");
}
// Initialize Ethernet library
void initEthernet() {
// Initialize Ethernet library
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
if (!Ethernet.begin(mac)) {
Serial.println("Failed to configure Ethernet");
Serial.println(F("Failed to configure Ethernet"));
return;
}
Serial.println("Ethernet ready");
delay(1000);
}
// Open connection to the HTTP server
bool connect(const char* hostName) {
Serial.print("Connect to ");
Serial.println(hostName);
Serial.println(F("Connecting..."));
bool ok = client.connect(hostName, 80);
// Connect to HTTP server
EthernetClient client;
client.setTimeout(10000);
if (!client.connect("arduinojson.org", 80)) {
Serial.println(F("Connection failed"));
return;
}
Serial.println(ok ? "Connected" : "Connection Failed!");
return ok;
}
Serial.println(F("Connected!"));
// Send the HTTP GET request to the server
bool sendRequest(const char* host, const char* resource) {
Serial.print("GET ");
Serial.println(resource);
// Send HTTP request
client.println(F("GET /example.json HTTP/1.0"));
client.println(F("Host: arduinojson.org"));
client.println(F("Connection: close"));
if (client.println() == 0) {
Serial.println(F("Failed to send request"));
client.stop();
return;
}
client.print("GET ");
client.print(resource);
client.println(" HTTP/1.0");
client.print("Host: ");
client.println(host);
client.println("Connection: close");
client.println();
// Check HTTP status
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
// 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;
}
return true;
}
// Skip HTTP headers so that we are at the beginning of the response's body
bool skipResponseHeaders() {
// HTTP headers end with an empty line
// Skip HTTP headers
char endOfHeaders[] = "\r\n\r\n";
client.setTimeout(HTTP_TIMEOUT);
bool ok = client.find(endOfHeaders);
if (!ok) {
Serial.println("No response or invalid response!");
if (!client.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
client.stop();
return;
}
return ok;
}
// 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;
DynamicJsonDocument doc(capacity);
// Parse the JSON from the input string and extract the interesting values
// Here is the JSON we need to parse
// {
// "id": 1,
// "name": "Leanne Graham",
// "username": "Bret",
// "email": "Sincere@april.biz",
// "address": {
// "street": "Kulas Light",
// "suite": "Apt. 556",
// "city": "Gwenborough",
// "zipcode": "92998-3874",
// "geo": {
// "lat": "-37.3159",
// "lng": "81.1496"
// }
// },
// "phone": "1-770-736-8031 x56442",
// "website": "hildegard.org",
// "company": {
// "name": "Romaguera-Crona",
// "catchPhrase": "Multi-layered client-server neural-net",
// "bs": "harness real-time e-markets"
// }
// }
bool readReponseContent(struct UserData* userData) {
// Compute optimal size of the JSON buffer according to what we need to parse.
// See https://bblanchon.github.io/ArduinoJson/assistant/
const size_t BUFFER_SIZE =
JSON_OBJECT_SIZE(8) // the root object has 8 elements
+ JSON_OBJECT_SIZE(5) // the "address" object has 5 elements
+ JSON_OBJECT_SIZE(2) // the "geo" object has 2 elements
+ JSON_OBJECT_SIZE(3) // the "company" object has 3 elements
+ MAX_CONTENT_SIZE; // additional space for strings
// Allocate a temporary memory pool
DynamicJsonBuffer jsonBuffer(BUFFER_SIZE);
JsonObject& root = jsonBuffer.parseObject(client);
if (!root.success()) {
Serial.println("JSON parsing failed!");
return false;
// Parse JSON object
DeserializationError error = deserializeJson(doc, client);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
client.stop();
return;
}
// Here were copy the strings we're interested in
strcpy(userData->name, root["name"]);
strcpy(userData->company, root["company"]["name"]);
// It's not mandatory to make a copy, you could just use the pointers
// Since, they are pointing inside the "content" buffer, so you need to make
// sure it's still in memory when you read the string
// Extract values
Serial.println(F("Response:"));
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);
return true;
}
// Print the data extracted from the JSON
void printUserData(const struct UserData* userData) {
Serial.print("Name = ");
Serial.println(userData->name);
Serial.print("Company = ");
Serial.println(userData->company);
}
// Close the connection with the HTTP server
void disconnect() {
Serial.println("Disconnect");
// Disconnect
client.stop();
}
// Pause for a 1 minute
void wait() {
Serial.println("Wait 60 seconds");
delay(60000);
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
// --------
//
// 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.
//
// The book "Mastering ArduinoJson" contains a tutorial on deserialization
// 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 Reddit.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
@@ -1,59 +1,59 @@
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
// This example shows how to deserialize a JSON document with ArduinoJson.
//
// https://arduinojson.org/v6/example/parser/
#include <ArduinoJson.h>
void setup() {
// Initialize serial port
Serial.begin(9600);
while (!Serial) {
// wait serial port initialization
}
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,
// If the JSON object is more complex, you need to increase that value.
// See https://bblanchon.github.io/ArduinoJson/assistant/
StaticJsonBuffer<200> jsonBuffer;
// 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;
// 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);
@@ -65,3 +65,16 @@ void setup() {
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 ❤❤❤❤❤
+101 -60
View File
@@ -1,76 +1,117 @@
// Sample Arduino Json Web Server
// Created by Benoit Blanchon.
// Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// 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.
//
// The JSON document contains the values of the analog and digital pins.
// It looks like that:
// {
// "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>
#include <SPI.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 177);
EthernetServer server(80);
bool readRequest(EthernetClient& client) {
bool currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
return true;
} else if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
return false;
}
JsonObject& prepareResponse(JsonBuffer& jsonBuffer) {
JsonObject& root = jsonBuffer.createObject();
JsonArray& analogValues = root.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
int value = analogRead(pin);
analogValues.add(value);
}
JsonArray& digitalValues = root.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
int value = digitalRead(pin);
digitalValues.add(value);
}
return root;
}
void writeResponse(EthernetClient& client, JsonObject& json) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println("Connection: close");
client.println();
json.prettyPrintTo(client);
}
void setup() {
Ethernet.begin(mac, ip);
// Initialize serial port
Serial.begin(9600);
while (!Serial) continue;
// Initialize Ethernet libary
if (!Ethernet.begin(mac)) {
Serial.println(F("Failed to initialize Ethernet library"));
return;
}
// Start to listen
server.begin();
Serial.println(F("Server is ready."));
Serial.print(F("Please connect to http://"));
Serial.println(Ethernet.localIP());
}
void loop() {
// Wait for an incomming connection
EthernetClient client = server.available();
if (client) {
bool success = readRequest(client);
if (success) {
// Use https://bblanchon.github.io/ArduinoJson/assistant/ to
// compute the right size for the buffer
StaticJsonBuffer<500> jsonBuffer;
JsonObject& json = prepareResponse(jsonBuffer);
writeResponse(client, json);
}
delay(1);
client.stop();
// Do we have a client?
if (!client)
return;
Serial.println(F("New client"));
// Read the request (we ignore the content in this example)
while (client.available()) client.read();
// Allocate a temporary JsonDocument
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<500> doc;
// Create the "analog" array
JsonArray analogValues = doc.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
// Read the analog input
int value = analogRead(pin);
// Add the value at the end of the array
analogValues.add(value);
}
// Create the "digital" array
JsonArray digitalValues = doc.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
// Read the digital input
int value = digitalRead(pin);
// Add the value at the end of the array
digitalValues.add(value);
}
Serial.print(F("Sending: "));
serializeJson(doc, Serial);
Serial.println();
// Write response headers
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
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
// --------
//
// 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.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
+89 -40
View File
@@ -1,57 +1,106 @@
// Send a JSON object on UDP at regular interval
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// You can easily test this program with netcat:
// $ nc -ulp 8888
// 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.
// It looks like that:
// {
// "analog": [0, 76, 123, 158, 192, 205],
// "digital": [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]
// }
//
// by Benoit Blanchon, MIT License 2015-2017
// If you want to test this program, you need to be able to receive the UDP
// packets.
// 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>
#include <SPI.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress localIp(192, 168, 0, 177);
IPAddress remoteIp(192, 168, 0, 109);
unsigned int remotePort = 8888;
unsigned localPort = 8888;
IPAddress remoteIp(192, 168, 0, 108); // <- EDIT!!!!
unsigned short remotePort = 8888;
unsigned short localPort = 8888;
EthernetUDP udp;
JsonObject& buildJson(JsonBuffer& jsonBuffer) {
JsonObject& root = jsonBuffer.createObject();
JsonArray& analogValues = root.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
int value = analogRead(pin);
analogValues.add(value);
}
JsonArray& digitalValues = root.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
int value = digitalRead(pin);
digitalValues.add(value);
}
return root;
}
void sendJson(JsonObject& json) {
udp.beginPacket(remoteIp, remotePort);
json.printTo(udp);
udp.println();
udp.endPacket();
}
void setup() {
Ethernet.begin(mac, localIp);
// Initialize serial port
Serial.begin(9600);
while (!Serial) continue;
// Initialize Ethernet libary
if (!Ethernet.begin(mac)) {
Serial.println(F("Failed to initialize Ethernet library"));
return;
}
// Enable UDP
udp.begin(localPort);
}
void loop() {
delay(1000);
// Allocate a temporary JsonDocument
// Use https://arduinojson.org/v6/assistant to compute the capacity.
StaticJsonDocument<500> doc;
// Use https://bblanchon.github.io/ArduinoJson/assistant/ to
// compute the right size for the buffer
StaticJsonBuffer<300> jsonBuffer;
JsonObject& json = buildJson(jsonBuffer);
sendJson(json);
// Create the "analog" array
JsonArray analogValues = doc.createNestedArray("analog");
for (int pin = 0; pin < 6; pin++) {
// Read the analog input
int value = analogRead(pin);
// Add the value at the end of the array
analogValues.add(value);
}
// Create the "digital" array
JsonArray digitalValues = doc.createNestedArray("digital");
for (int pin = 0; pin < 14; pin++) {
// Read the digital input
int value = digitalRead(pin);
// Add the value at the end of the array
digitalValues.add(value);
}
// Log
Serial.print(F("Sending to "));
Serial.print(remoteIp);
Serial.print(F(" on port "));
Serial.println(remotePort);
serializeJson(doc, Serial);
// Send UDP packet
udp.beginPacket(remoteIp, remotePort);
serializeJson(doc, udp);
udp.println();
udp.endPacket();
// Wait
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
// --------
//
// 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.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
+75
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
}
+40 -33
View File
@@ -1,56 +1,63 @@
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
// This example shows the different ways you can use Flash strings with
// ArduinoJson.
//
// Use Flash strings sparingly, because ArduinoJson duplicates them in the
// 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>
// About
// -----
// This example shows the different ways you can use PROGMEM with ArduinoJson.
// Please don't see this as an invitation to use PROGMEM.
// On the contrary, you should always use char[] when possible, it's much more
// efficient in term of code size, speed and memory usage.
void setup() {
#ifdef PROGMEM
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 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() {
// 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 memory
// problem.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
+45 -31
View File
@@ -1,63 +1,77 @@
// Copyright Benoit Blanchon 2014-2017
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
// This example shows the different ways you can use String with ArduinoJson.
//
// Use String objects sparingly, because ArduinoJson duplicates them in the
// 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>
// About
// -----
// This example shows the different ways you can use String with ArduinoJson.
// Please don't see this as an invitation to use String.
// On the contrary, you should always use char[] when possible, it's much more
// efficient in term of code size, speed and memory usage.
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 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() {
// 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 problem.
//
// 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.
// Learn more at https://arduinojson.org/book/
// Use the coupon code TWENTY for a 20% discount ❤❤❤❤❤
+4
View File
@@ -0,0 +1,4 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
check_required_components("@PROJECT_NAME@")
+95
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()
+8
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)
+8
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 ""
)
+4
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.)
+16
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
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"
+16
View File
@@ -0,0 +1,16 @@
#include <ArduinoJson.h>
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() {}
+16
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
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
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() {}
+58
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
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" >> $@
+11
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;
}
@@ -0,0 +1 @@
9720730739393920739
+2
View File
@@ -0,0 +1,2 @@
*
!.gitignore
+11
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.
+1
View File
@@ -0,0 +1 @@
@@ -0,0 +1 @@
’¥hello¥world
@@ -0,0 +1 @@
@@ -0,0 +1 @@

@@ -0,0 +1 @@
‚£one£two
@@ -0,0 +1 @@
«hello world
@@ -0,0 +1 @@
ハ@H
@@ -0,0 +1 @@
Л@ !КАѓo
+1
View File
@@ -0,0 +1 @@
+1
View File
@@ -0,0 +1 @@
Ҷi.
+1
View File
@@ -0,0 +1 @@
4Vx埔゙
+1
View File
@@ -0,0 +1 @@
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
Ùhello
+1
View File
@@ -0,0 +1 @@
@@ -0,0 +1 @@
09
@@ -0,0 +1 @@
4Vx
@@ -0,0 +1 @@
4Vx埔゙
+1
View File
@@ -0,0 +1 @@
+50
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;
}
+1
View File
@@ -0,0 +1 @@
name=ArduinoJsonCI
+5
View File
@@ -0,0 +1,5 @@
#include "ArduinoJson.h"
void setup() {}
void loop() {}
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
set -eu
INPUT=$1
OUTPUT=$2
cd "$INPUT"
# remove existing file
rm -f "$OUTPUT"
# create zip
7z a "$OUTPUT" \
-xr!.vs \
CHANGELOG.md \
examples \
src \
keywords.txt \
library.properties \
LICENSE.txt \
README.md \
ArduinoJson.h
+65
View File
@@ -0,0 +1,65 @@
#!/bin/bash
set -e
RE_RELATIVE_INCLUDE='^#[[:space:]]*include[[:space:]]*"(.*)"'
RE_ABSOLUTE_INCLUDE='^#[[:space:]]*include[[:space:]]*<(ArduinoJson/.*)>'
RE_SYSTEM_INCLUDE='^#[[:space:]]*include[[:space:]]*<(.*)>'
RE_EMPTY='^(#[[:space:]]*pragma[[:space:]]+once)?[[:space:]]*(//.*)?$'
SRC_DIRECTORY="$(realpath "$(dirname $0)/../../src")"
declare -A INCLUDED
process()
{
local PARENT=$1
local FOLDER=$(dirname $1)
local SHOW_COMMENT=$2
while IFS= read -r LINE; do
if [[ $LINE =~ $RE_ABSOLUTE_INCLUDE ]]; then
local CHILD=${BASH_REMATCH[1]}
local CHILD_PATH
CHILD_PATH=$(realpath "$SRC_DIRECTORY/$CHILD")
echo "$PARENT -> $CHILD" >&2
if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then
INCLUDED[$CHILD_PATH]=true
process "$CHILD" false
fi
elif [[ $LINE =~ $RE_RELATIVE_INCLUDE ]]; then
local CHILD=${BASH_REMATCH[1]}
pushd "$FOLDER" > /dev/null
local CHILD_PATH
CHILD_PATH=$(realpath "$CHILD")
echo "$PARENT -> $CHILD" >&2
if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then
INCLUDED[$CHILD_PATH]=true
process "$CHILD" false
fi
popd > /dev/null
elif [[ $LINE =~ $RE_SYSTEM_INCLUDE ]]; then
local CHILD=${BASH_REMATCH[1]}
echo "$PARENT -> <$CHILD>" >&2
if [[ ! ${INCLUDED[$CHILD]} ]]; then
echo "#include <$CHILD>"
INCLUDED[$CHILD]=true
fi
elif [[ "${SHOW_COMMENT}" = "true" ]] ; then
echo "$LINE"
elif [[ ! $LINE =~ $RE_EMPTY ]]; then
echo "$LINE"
fi
done < $PARENT
}
simplify_namespaces() {
perl -p0i -e 's|ARDUINOJSON_END_PUBLIC_NAMESPACE\r?\nARDUINOJSON_BEGIN_PUBLIC_NAMESPACE\r?\n||igs' "$1"
perl -p0i -e 's|ARDUINOJSON_END_PRIVATE_NAMESPACE\r?\nARDUINOJSON_BEGIN_PRIVATE_NAMESPACE\r?\n||igs' "$1"
rm -f "$1.bak"
}
INCLUDED=()
INPUT=$1
OUTPUT=$2
process "$INPUT" true > "$OUTPUT"
simplify_namespaces "$OUTPUT"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
set -eu
TAG="$1"
CHANGELOG="$2"
cat << END
## Changes
$(awk '/\* /{ FOUND=1 } /^[[:space:]]*$/ { if(FOUND) exit } { if(FOUND) print }' "$CHANGELOG")
[View version history](https://github.com/bblanchon/ArduinoJson/blob/$TAG/CHANGELOG.md)
END
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
set -eu
VERSION="$1"
CHANGELOG="$2"
FRONTMATTER="$3"
cat << END
---
branch: v6
version: $VERSION
date: '$(date +'%Y-%m-%d')'
$(cat "$FRONTMATTER")
---
$(awk '/\* /{ FOUND=1; print; next } { if (FOUND) exit}' "$CHANGELOG")
END
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -eu
SOURCE_DIR="$(dirname "$0")/../.."
WORK_DIR=$(mktemp -d)
trap 'rm -rf "$WORK_DIR"' EXIT
cp "$SOURCE_DIR/README.md" "$WORK_DIR/README.md"
cp "$SOURCE_DIR/CHANGELOG.md" "$WORK_DIR/CHANGELOG.md"
cp "$SOURCE_DIR/library.properties" "$WORK_DIR/library.properties"
cp "$SOURCE_DIR/LICENSE.txt" "$WORK_DIR/LICENSE.txt"
cp -r "$SOURCE_DIR/src" "$WORK_DIR/"
cp -r "$SOURCE_DIR/examples" "$WORK_DIR/"
cd "$WORK_DIR"
particle library upload
particle library publish
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env bash
set -eu
which awk sed jq 7z curl perl >/dev/null
cd "$(dirname "$0")/../.."
if ! git diff --quiet --exit-code; then
echo "Repository contains uncommitted changes"
exit
fi
VERSION="$1"
DATE=$(date +%F)
TAG="v$VERSION"
VERSION_REGEX='[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9]+)?'
update_version_in_source () {
IFS=".-" read MAJOR MINOR REVISION EXTRA < <(echo "$VERSION")
UNDERLINE=$(printf -- '-%.0s' $(seq 1 ${#TAG}))
sed -i~ -bE "1,20{s/$VERSION_REGEX/$VERSION/g}" README.md
rm README.md~
sed -i~ -bE "4s/HEAD/$TAG ($DATE)/; 5s/-+/$UNDERLINE/" CHANGELOG.md
rm CHANGELOG.md~
sed -i~ -bE "s/(project\\s*\\(ArduinoJson\\s+VERSION\\s+).*?\\)/\\1$MAJOR.$MINOR.$REVISION)/" CMakeLists.txt
rm CMakeLists.txt~
sed -i~ -bE "s/\"version\":.*$/\"version\": \"$VERSION\",/" library.json
rm library.json~
sed -i~ -bE "s/version=.*$/version=$VERSION/" library.properties
rm library.properties~
sed -i~ -bE "s/version: .*$/version: $VERSION.{build}/" appveyor.yml
rm appveyor.yml~
sed -i~ -bE "s/^version: .*$/version: \"$VERSION\"/" idf_component.yml
rm idf_component.yml~
sed -i~ -bE \
-e "s/ARDUINOJSON_VERSION .*$/ARDUINOJSON_VERSION \"$VERSION\"/" \
-e "s/ARDUINOJSON_VERSION_MAJOR .*$/ARDUINOJSON_VERSION_MAJOR $MAJOR/" \
-e "s/ARDUINOJSON_VERSION_MINOR .*$/ARDUINOJSON_VERSION_MINOR $MINOR/" \
-e "s/ARDUINOJSON_VERSION_REVISION .*$/ARDUINOJSON_VERSION_REVISION $REVISION/" \
src/ArduinoJson/version.hpp
rm src/ArduinoJson/version.hpp*~
}
commit_new_version () {
git add src/ArduinoJson/version.hpp README.md CHANGELOG.md library.json library.properties appveyor.yml CMakeLists.txt idf_component.yml
git commit -m "Set version to $VERSION"
}
add_tag () {
CHANGES=$(awk '/\* /{ FOUND=1; print; next } { if (FOUND) exit}' CHANGELOG.md)
git tag -m "ArduinoJson $VERSION"$'\n'"$CHANGES" "$TAG"
}
push () {
git push --follow-tags
}
update_version_in_source
commit_new_version
add_tag
push
extras/scripts/build-arduino-package.sh . "../ArduinoJson-$TAG.zip"
extras/scripts/build-single-header.sh "src/ArduinoJson.h" "../ArduinoJson-$TAG.h"
extras/scripts/build-single-header.sh "src/ArduinoJson.hpp" "../ArduinoJson-$TAG.hpp"
extras/scripts/wandbox/publish.sh "../ArduinoJson-$TAG.h" > "../ArduinoJson-$TAG-wandbox.txt" || echo "Wandbox failed!"
extras/scripts/get-release-page.sh "$VERSION" "CHANGELOG.md" "../ArduinoJson-$TAG-wandbox.txt" > "../ArduinoJson-$TAG.md"
echo "You can now copy ../ArduinoJson-$TAG.md into arduinojson.org/collections/_versions/$VERSION.md"
@@ -0,0 +1,60 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to generate a JSON document with ArduinoJson.
#include <iostream>
#include "ArduinoJson.h"
int main() {
// Allocate the JSON document
//
// 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;
// StaticJsonObject allocates memory on the stack, it can be
// replaced by DynamicJsonDocument which allocates in the heap.
//
// DynamicJsonDocument doc(200);
// StaticJsonObject allocates memory on the stack, it can be
// replaced by DynamicJsonDocument which allocates in the heap.
//
// DynamicJsonDocument doc(200);
// Add values in the document
//
doc["sensor"] = "gps";
doc["time"] = 1351824120;
// Add an array.
//
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
// Generate the minified JSON and send it to STDOUT
//
serializeJson(doc, std::cout);
// The above line prints:
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
// Start a new line
std::cout << std::endl;
// Generate the prettified JSON and send it to STDOUT
//
serializeJsonPretty(doc, std::cout);
// The above line prints:
// {
// "sensor": "gps",
// "time": 1351824120,
// "data": [
// 48.756080,
// 2.302038
// ]
// }
}
@@ -0,0 +1,59 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to deserialize a JSON document with ArduinoJson.
#include <iostream>
#include "ArduinoJson.h"
int main() {
// 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<300> doc;
// StaticJsonDocument<N> allocates memory on the stack, it can be
// replaced by DynamicJsonDocument which allocates in the heap.
//
// DynamicJsonDocument doc(200);
// JSON 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.
char json[] =
"{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
// Deserialize the JSON document
DeserializationError error = deserializeJson(doc, json);
// Test if parsing succeeds.
if (error) {
std::cerr << "deserializeJson() failed: " << error.c_str() << std::endl;
return 1;
}
// 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.
std::cout << sensor << std::endl;
std::cout << time << std::endl;
std::cout << latitude << std::endl;
std::cout << longitude << std::endl;
return 0;
}
@@ -0,0 +1,68 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
//
// This example shows how to generate a JSON document with ArduinoJson.
#include <iostream>
#include "ArduinoJson.h"
int main() {
// Allocate the JSON document
//
// Inside the brackets, 300 is the size of the memory pool in bytes.
// Don't forget to change this value to match your JSON document.
// Use https://arduinojson.org/assistant to compute the capacity.
StaticJsonDocument<300> doc;
// StaticJsonObject allocates memory on the stack, it can be
// replaced by DynamicJsonObject which allocates in the heap.
//
// DynamicJsonObject doc(200);
// MessagePack 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.
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]
// }
// doc 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.
DeserializationError error = deserializeMsgPack(doc, input);
// Test if parsing succeeds.
if (error) {
std::cerr << "deserializeMsgPack() failed: " << error.c_str() << std::endl;
return 1;
}
// 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.
std::cout << sensor << std::endl;
std::cout << time << std::endl;
std::cout << latitude << std::endl;
std::cout << longitude << std::endl;
return 0;
}
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -eu
ARDUINOJSON_H="$1"
read_string() {
jq --slurp --raw-input '.' "$1"
}
compile() {
FILE_PATH="$(dirname $0)/$1.cpp"
cat >parameters.json <<END
{
"code":$(read_string "$FILE_PATH"),
"codes": [{"file":"ArduinoJson.h","code":$(read_string "$ARDUINOJSON_H")}],
"options": "warning",
"compiler": "gcc-4.9.4",
"save": true
}
END
URL=$(curl -sS -H "Content-type: application/json" -d @parameters.json https://wandbox.org/api/compile.json | jq --raw-output .url)
rm parameters.json
[ -n "$URL" ] && echo "$1: $URL"
}
compile "JsonGeneratorExample"
compile "JsonParserExample"
compile "MsgPackParserExample"
+1
View File
@@ -0,0 +1 @@
Checks: '-clang-analyzer-security.insecureAPI.*'
+29
View File
@@ -0,0 +1,29 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2023, Benoit BLANCHON
# MIT License
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(catch)
link_libraries(ArduinoJson catch)
include_directories(Helpers)
add_subdirectory(Cpp17)
add_subdirectory(Cpp20)
add_subdirectory(FailingBuilds)
add_subdirectory(IntegrationTests)
add_subdirectory(JsonArray)
add_subdirectory(JsonDeserializer)
add_subdirectory(JsonDocument)
add_subdirectory(JsonObject)
add_subdirectory(JsonSerializer)
add_subdirectory(JsonVariant)
add_subdirectory(MemoryPool)
add_subdirectory(Misc)
add_subdirectory(MixedConfiguration)
add_subdirectory(MsgPackDeserializer)
add_subdirectory(MsgPackSerializer)
add_subdirectory(Numbers)
add_subdirectory(TextFormatter)

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