Skip to content

Releases: nlohmann/json

JSON for Modern C++ version 3.11.3

28 Nov 21:38
9cca280
Compare
Choose a tag to compare

Release date: 2023-11-28
SHA-256: 9bea4c8066ef4a1c206b2be5a36302f8926f7fdc6087af5d20b417d0cf103ea6 (json.hpp), a22461d13119ac5c78f205d3df1db13403e58ce1bb1794edc9313677313f4a9d (include.zip), d6c65aca6b1ed68e7a182f4757257b107ae403032760ed6ef121c9d55e81757d (json.tar.xz)

Summary

This release fixes some bugs found in the 3.11.2 release.

All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

✨ New Features

  • Allow custom base class as node customization point. This adds an additional template parameter which allows to set a custom base class for nlohmann::json. This class serves as an extension point and allows to add functionality to json node. Examples for such functionality might be metadata or additional member functions (e.g., visitors) or other application specific code. By default the parameter is set to void and an empty base class is used. In this case the library behaves as it already did. #3110
  • Add more specific parse error message when attempting to parse empty input. #4037 #4180
  • Add serialization-only user defined type macros (NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE). #3816
  • Add Bazel build support. If you are using Bazel you can simply reference this repository using http_archive or git_repository and depend on @nlohmann_json//:json. #3709
  • Support Apple's Swift Package Manager. #4010

🐛 Bug Fixes

  • Adjust CMake files to accept NEW CMake policies up to CMake 3.14. This fixes a nasty deprecation warning that "Compatibility with CMake < 3.5 will be removed from a future version of CMake". #4076 #4112
  • Fix CMake header path in install with custom CMAKE_INSTALL_INCLUDEDIR. #4194
  • Add missing <numeric> header include. #3717 #3718 #3719
  • Replace uses of INT_MIN/INT_MAX, etc. with std::numeric_limits and consistently use std-namespaced integer types to make library work with newer GCC versions. #3722 #3723
  • Add missing files (json_fwd.hpp and Bazel build files) to release artifact include.zip. #3727 #3728
  • Fix 'declaration hides global declaration' warning. #3751
  • Fix natvis XML. #3858 #3863
  • Fix warning about moved from object. #3805 #3889
  • Remove a magic number to fix a warning. #3837 #3888
  • Fix debug pretty-printer by checking if match is valid before accessing group. #3919 #3920
  • Fix custom allocators by defining missing rebind type. #3895 #3927
  • Prevent memory leak when exception is thrown in adl_serializer::to_json #3881 #3901
  • Fix Clang-Tidy warnings. #4047
  • Fix init-list construction when size_type is not int. #4140
  • Fix deprecation warning "identifier _json preceded by whitespace in a literal operator declaration". #4129 #4161
  • Fix compile error with _HAS_STATIC_RTTI=0. #4046
  • Fix char_traits deprecation warning "char_traits<unsigned char> is deprecated: char_traits<T> for T not equal to char, wchar_t, char8_t, char16_t or char32_t is non-standard". #4163 #4179

🔨 Further Changes

CI

Documentation

Tests

  • Use std::ranges::equals for range comparisons in test case. #3927 #3950
  • Add more algorithm tests to unit-algorithm.cpp. #4044

🔥 Deprecated functions

This release does not deprecate any function. See the migration guide for help adjusting your code for future versions.

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.11.2

12 Aug 13:06
bc889af
Compare
Choose a tag to compare

Release date: 2022-08-12
SHA-256: 665fa14b8af3837966949e8eb0052d583e2ac105d3438baba9951785512cf921 (json.hpp), e5c7a9f49a16814be27e4ed0ee900ecd0092bfb7dbfca65b5a421b774dccaaed (include.zip), 8c4b26bf4b422252e13f332bc5e388ec0ab5c3443d24399acb675e68278d341f (json.tar.xz)

Summary

This release fixes some bugs found in the 3.11.1 release. Furthermore, the of the namespace library has been re-structured.

All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug Fixes

  • Fix the value function which was broken for strings, size types, and nullptr in release 3.11.0. #3652 #3655 #3663
  • Fix the json_fwd.hpp header to be self-contained and add it to the single-header release. #3656 #3679 #3687
  • Fix regression that broke using json_pointer as key in associative containers. #3680 #3685
  • Add missing constraint to deprecated JSON Pointer overloads of contains and at. #3658 #3681
  • Fix comparison between json_pointer and strings with == and !=. These comparisons worked in 3.10.5, but were broken in 3.11.0 and 3.11.1. #3654 #3664
  • Fix to_json conversion of std::vector<bool>::reference and std::vector<bool>::const_reference for STLs where these are the same as basic_json::boolean_t& and basic_json::boolean_t, respectively. #3677 #3678

⚡ Improvements

🔨 Further Changes

Documentation

Community

  • Add a badge for the Discord chat to the README file. The goal of that additional communication channel beyond the existing ones is to quickly coordinate between the contributors. #3651
  • Complete contributor list. #3662 #3670

CI

  • Remove the macos-10.15 image from the CI as it is removed by GitHub Actions. #3612 #3615 #3626
  • Remove hardcoded paths in Ubuntu workflow. #3626
  • Only trigger AppVeyor builds if relevant files have been changed. #3626
  • Fix CodeQL warning. #3626
  • Harmonize naming of GitHub Actions jobs. #3661
  • Add labeler action to automatically add PR labels based on the changed files. #3671 #3674 #3675
  • Lint API documentation in the CI. #3672
  • Add local LGTM configuration and suppress warnings on third-party scripts. #3643

🔥 Deprecated functions

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

  • The function iterator_wrapper is deprecated. Please use the member function items() instead.
  • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
  • Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).
  • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated. Use json_pointer::to_string instead.

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.11.1

01 Aug 21:32
69d7448
Compare
Choose a tag to compare

Release date: 2022-08-01
SHA-256: 9279dc616aac67efce68967f118051b50236612b90572e059783d368bd78687e (json.hpp), 9c15ca7806f863872452bfbc85fee6d1c9868117e3ea5e00a204ae961a2e1ae7 (include.zip), e6dd39f8f2da9cab11de2212acdd40b1cc1aafbe09da8c92933b911d19da3302 (json.tar.xz)

Known issues

  • #3652 Regression: call to member function 'value' is ambiguous
  • #3654 Regression: no match for 'operator!=' comparing json_pointer and const char */string_t
  • #3655 Regression: .value<size_t> is compilation error

All issues are fixed in the develop branch and will be part of the 3.11.2 release.

Summary

Version 3.11.0 moved the user-defined string literals (UDL) into namespace nlohmann::literals::json_literals (see documentation). Unfortunately, this namespace was not imported to the global namespace by default which broke code. This release fixes this bug.

All changes are backward-compatible. See release notes of version 3.11.0 for more information on other features.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug fixes

  • Set default value of JSON_USE_GLOBAL_UDLS and the CMake options JSON_GlobalUDLs to 1 to import the user-defined string literals from the nlohmann::literals::json_literals namespace into the global namespace by default. #3644 #3645 #3646

JSON for Modern C++ version 3.11.0

01 Aug 11:16
499422b
Compare
Choose a tag to compare

🐛 Unfortunately, this release introduced a bug that breaks existing usages of the user-defined string literals (UDL). This is fixed in version 3.11.1.


Release date: 2022-08-01
SHA-256: eb73896e9ce706ae6a62ce697dc8aca214840f70d8281779a6ea0cabe3afab3f (json.hpp), b4789050cacd110faf8b100cee82af19ad0b4d3249625f6582a60eeeb80c84a7 (include.zip), 5c8f7a4d9e9c0d565e71b6e5b0b3a12f784ffbf142e1ddc7ba86002cefb4c6ee (json.tar.xz)

Summary

Version 3.11.0 is one of the biggest releases (in terms of closed issues and merged pull requests) ever. It brings:

  • String view support for all functions working on object keys (e.g., at or operator[]), avoiding unnecessary allocations.
  • BJData as the fifth supported binary format besides BSON, CBOR, MessagePack, and UBJSON.
  • Better C++20 support to make the library integrate more smoothly with newer codebases.
  • Better support for avoiding problems when multiple versions of the library are used in the same project.
  • Even better and more extensive documentation and examples.
  • More tests for edge cases like 32-bit support, C++20 features, using the library with ICPC, or after including <windows.h>.

All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

✨ New Features

🐛 Bug fixes

⚡ Improvements

Warnings

  • Fix ICPC warning 1098. #3632, #3634
  • Fix a -Wpragmas warning in GCC <11. #3550

🔨 Further Changes

CI

  • Add support for Visual Studio 2022., #3295
  • Adjust GitHub Actions CI wrt. windows-latest image. #3368
  • Remove deprecated windows-2016 image. #3416
  • Speed up AppVeyor CI. #3422
  • Update CI image to check with ICPC, GCC 11 and Clang 14. #3420
  • Add build step for ICPC to CI. #3465
  • Add more Xcode versions (13.3.1, 13.3, 13.2.1, 13.2, and 13.1) to the CI. #3485
  • Fix "JSON_MultipleHeaders" option spelling in CI. #3555
  • Increase timeout for Unicode tests. #3579, #3580, #3614
  • Abort CI runs on newer commits on the same branch. #3610
  • Fix MinGW CI failures. #3618
  • Disable exceptions on ICPC (for the disabled_exceptions unit test). #3621

Unit tests

Documentation and examples

🔥 Deprecated functions

The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) has been deprecated. Use json_pointer::to_string instead.

The following functions have been deprecated in earlier versions and will be removed in the next m...

Read more

JSON for Modern C++ version 3.10.5

03 Jan 05:41
4f8fba1
Compare
Choose a tag to compare

Release date: 2022-01-03
SHA-256: e832d339d9e0c042e7dff807754769d778cf5d6ae9730ce21eed56de99cb5e86 (json.hpp), b94997df68856753b72f0d7a3703b7d484d4745c567f3584ef97c96c25a5798e (include.zip)

Summary

The previous version 3.10.4 introduced support to convert std::filesystem objects to JSON and vice versa. Unfortunately, we made the assumption that any compiler supporting C++17 would also have proper filesystem support. This was a mistake. This release introduces preprocessor checks (and means to override them) to make sure that the conversion support is only compiled if the compiler is detected to support it.

All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug fixes

Warnings

⚡ Improvements

  • Add a parameter to the update function to recursively merge objects with common keys. #3006 #3069
  • Extend std::hash and std::swap to work on any nlohmann::basic_json specializations rather than just nlohmann::json. #3121

🔨 Further Changes

Tests and CI

  • Update CI to use Clang 14, GCC 6, and Clang-Tidy 14. #3088
  • Update cpplint. #3225
  • Add build step for the Nvidia CUDA Compiler (NVCC). #3227
  • Remove Travis CI. #3087 #3233
  • Compile and execute the test suite with C++17. #3101

Documentation

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.10.4

16 Oct 12:49
fec56a1
Compare
Choose a tag to compare

Release date: 2021-10-16
SHA-256: c9ac7589260f36ea7016d4d51a6c95809803298c7caec9f55830a0214c5f9140 (json.hpp), 62c585468054e2d8e7c2759c0d990fd339d13be988577699366fe195162d16cb (include.zip)

Summary

This release fixes two bugs introduced in release 3.10.0 and fixes the conversion of std::filesystem::path. All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug Fixes

  • Fix regression bug introduced in release 3.10.0 which broke compilation for types with an explicit default constructor with default arguments. #3077 #3079
  • Fix regression bug introduced in release 3.10.0 which treated the return values of std::find and std::remove as pointers which could break compilation. #3081 #3082
  • Fix converting std::filesystem::path to JSON. Before release 3.10.3, such a conversion would trigger a stack overflow. Release 3.10.3 then further broke compilation on Windows. #3070 #3073

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.10.3

08 Oct 12:40
aa0e847
Compare
Choose a tag to compare

Release date: 2021-10-08
SHA-256: bac28658a4c9410faa55960a70c1ac541e8a51bbaae57dc395e23ca5abd3159a (json.hpp), 4ae5744bc1edd216c79f619fd49915c0e490e41b05434c2d2b89e078299f04ed (include.zip)

Summary

This release fixes two more bug introduced in release 3.10.0: the extended diagnostics triggered assertions when used with update() or when inserting elements into arrays. All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug Fixes

  • Fix bug in the update() function when used with extended diagnostics. #3007 #3008
  • Fix bug when inserting into arrays when using extended diagnostics. #2926 #3032 #3037

⚡ Improvements

Binary formats

  • Custom allocators are now supported when writing binary formats (e.g., CBOR, MessagePack) into a std::vector. #2982 #2989

User-defined type support

  • Allow conversion from types that do not define an explicit iterator type, but have a begin() and end() function. #3020

Tests and CI

Documentation

  • Add script to generate docset for Dash, Velocity, and Zeal. #2967

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.10.2

26 Aug 07:09
626e7d6
Compare
Choose a tag to compare

Release date: 2021-08-26
SHA-256: 059743e48b37e41579ee3a92e82e984bfa0d2a9a2b20b175d04db8089f46f047 (json.hpp), 61e605be15e88deeac4582aaf01c09d616f8302edde7adcaba9261ddc3b4ceca (include.zip)

Summary

This release is made days after the 3.10.1 release due to a bug in the release script: The 3.10.1 release at GitHub contained the correct files, but the associated tag v3.10.1 points to the wrong commit. This release is made with a fixed build script. All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

⚡ Improvements

  • Fix the release scripts to correctly tag releases. #2973
  • Fix some -Wunused warnings on JSON_DIAGNOSTICS when the library is built without CMake. #2975 #2976

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.10.1

24 Aug 19:09
7194245
Compare
Choose a tag to compare

Release date: 2021-08-24
SHA-256: 0b628af78a2f0f3e2ff41d8dfa18314dd53831ffc2720c2944192d9f53727f4d (json.hpp), 144268f7f85afb0f0fbea7c796723c849724c975f9108ffdadde9ecedaa5f0b1 (include.zip)

Summary

This release fixes a bug introduced in release 3.10.0: the extended diagnostics triggered an assertion when used with ordered_json. All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

🐛 Bug Fixes

  • Fix an assertion triggered in the extended diagnostics using ordered_json. #2962 #2963
  • Make GDB pretty-printer robust against unset variable names. #2950

⚡ Improvements

Warnings

  • Add a missing header to hash.hpp. #2948
  • Fix some -Wextra-semi-stmt warnings. #2957

Tests and CI

  • Avoid duplicate builds in AppVeyor. #2952
  • Remove an outdated test binary that is not supported any longer. #2941 #2945
  • Skip tests that would fail if CMake option JSON_Install is set to OFF. #2946 #2947
  • Move Travis jobs to travis-ci.com. #2938 #2959
  • Set stack size for some unit tests when building with MSVC. #2955 #2961
  • Add a regression test. #2960

Documentation

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for instance, call basic_json::from_cbor(ptr, ptr+len) instead of basic_json::from_cbor({ptr, len}).

The following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

JSON for Modern C++ version 3.10.0

17 Aug 18:41
f42a74b
Compare
Choose a tag to compare

Release date: 2021-08-17
SHA-256: 230f3a03cefd586661ebab577a347c973d97a770afb89e22c52abc3c2a19d0a7 (json.hpp), b5e3bfad07feba218a26a4f809fbb0d1e33450524bf5d7244cabc92cf8178c69 (include.zip)

Summary

JSON for Modern C++ 3.10.0 is the first release for over a year. It contains some new features and a lot of minor changes and bug fixes.

Most notably, it introduces extended diagnostics. By defining JSON_DIAGNOSTICS before including the json.hpp, a JSON Pointer is added to exceptions which helps to debug issues with object access, array indices, or mismatching types.

Another important change behind the curtains is a fully overworked CI which performs a lot of checks for every commit which should allow more frequent releases in the future.

All changes are backward-compatible.

💰 Note you can support this project via GitHub sponsors or PayPal.

✨ New Features

  • Add extended diagnostics information by adding a JSON Pointer to the exception messages indicating the exact location of a invalid type errors or out-of-bound errors.

     [json.exception.type_error.302] (/address/housenumber) type must be number, but is string
    

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult. To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is then provided as a JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp. See the documentation for more information. #932 #1508 #2562 #2838 #2866

  • Add a GDB pretty printer to facilitate reading basic_json values in GDB. #1952 #2607

  • Add a new value store to the cbor_tag_handler_t which allows to store the tags of CBOR values as binary subtypes. #2863 #2908

  • Add support for containers with non-default-constructible types. #2574 #2576

🐛 Bug Fixes

  • Fix a regression bug that failed ordered_json to be used when exceptions were switched off. #2347 #2725 #2934
  • Added iterator range insertion for ordered_json. #2490 #2512
  • Change the type of binary subtypes to std::uint64_t to support subtypes >255. Furthermore, the return value of the subtype() function has been fixed to the documented value -1 in case no subtype is given. #2863 #2908
  • Fix move constructor of internal json_ref type which created null values when compiled with -fno-elide-constructors. #2387 #2405
  • Fix the compilation of input_adapter for containers in edge cases. #2553
  • Allow parsing from std::byte containers. #2413 #2546 #2550 #2602 #2869
  • Fix memory leak in to_json in case a JSON value is reused. #2865 #2872
  • Fix compilation error in case symbol EOF was not found. #2755 #2756
  • Fix Compilation error when using NLOHMANN_JSON_SERIALIZE_ENUM with ordered_json on libc++. #2491 #2825

Warnings

A lot of warnings have been fixed in this release. To make sure the library remains warning-free, the CI now breaks in case a warning is found in GCC (261 warning flags), Clang (flag -Weverything with 8 exceptions), or MSVC (flag /W4).

⚡ Improvements

Tests and CI

The CI chain has been completely overworked and now runs mostly on a dedicated Docker Image that contains all relevant tools.

  • Collected all CI calls in a CMake file which can be enabled by setting JSON_CI.
  • Linux now builds with Clang 3.5 to 12 and GCC 4.8 to 11 checking multiple C++ standards. #2540
  • Windows builds with MSVC 2015 to 2019, MinGW (GCC 8), Clang 11 and 12, and Clang-CL 11 checking multiple C++ standards.
  • Mac builds with Xcode 10.2.1 to Xcode 12.4 checking multiple C++ standards. #1798 #2561 #2737 #2790 #2817
  • Use static analysis tools Clang-Tidy, Cppcheck, Valgrind, Google Sanitizers, Clang Static Analyzer, Cpplint, and Facebook Infer.
  • Add internal checks for CMake flags, switched off exceptions, header amalgamation, self-contained headers, and exclusion of certain tests via CTest.
  • Providers: Move most Travis/AppVeyor builds to GitHub Actions. Use Drone CI for aarch64 build. Remove FOSSA. Properly select "Release" build for Travis CI builds. #2375 #2689
  • Remove #define private public hack from test files. Instead, macro JSON_PRIVATE_UNLESS_TESTED is used in the source code which defaults to private, but can be set to public to test internals. #43 #913 #1985 #2352

CMake

  • Fixed issue in CMake file that overwrote CMAKE_CXX_COMPILER when the test suite was compiled. #2344 #2384
  • Only enable CMake options JSON_BuildTests and JSON_Install by default when the library is the main project. #2513 #2514
  • Add CTest label not_reproducible to skip non-reproducible tests. #2324 #2560
  • Formatted CMake files ##2770
  • Add a CMake option JSON_SystemInclude to use SYSTEM in target_include_directories. #2762
  • Add CMake option JSON_FastTests (OFF by default) to which slow test suite.

Documentation

  • Fixed typos in the documentation. #2354 #2754
  • Extended documentation for discarded values and is_discarded() function. #2360 #2363
  • Fix Markdown of README. #2582
  • Fix example in README file. #2625 #2659
  • Fix example in parse exceptions documentation. #2679
  • Overworked documentation of number handling. #2747
  • Add link to Conan Center package to README. #2771
  • Added example for CPM.cmake. #2406
  • Update README to use HTTPS everywhere. #2789
  • Fixed consistency of using declarations in README. #2826
  • Fix documentation of tests that required a Git checkout. #2845
  • Fix code samples in GIF slideshow. #2457
  • Update documentation to reference RFC 8259 as JSON standard.
  • Add section on how to get support to README file.
  • Replaced links to Doxygen documentation with new API documentation.
  • Documented the effect of a bug in Microsoft's STL that makes what() member function of exception objects unusable in case _HAS_EXCEPTIONS=0 is set. #2824

Thirdparty

🔨 Further Changes

  • Use C++14 constructs where available. #2533
  • Fix pkg-config.pc generation. #2690
  • Add possibility to set the C++ standard via macros JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly. #2730 #2731 #2749
  • Add preprocessor symbol JSON_NO_IO. When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)). #2728 #2729 #2842 #2861
  • Benchmarks are handled via FetchContent and require CMake version 3.11. Removed Google Benchmark copy. Fix default branch name for Google Benchmarks. #2795 #2796
  • Simplify object parser for CBOR. #2879 #2598
  • Cleaned up maintainer Makefiles

Licensing

  • Clarified license of is_complete_type implementation. #2534
  • License fix for integer_sequence and index_sequence implementation. #2683

🔥 Deprecated functions

Passing iterator pairs or pointer/length pairs to parsing functions (basic_json::parse, basic_json::accept, basic_json::sax_parse, basic_json::from_cbor, basic_json::from_msgpack, basic_json::from_ubjson, basic_json::from_bson) via initializer lists is deprecated. Instead, pass two iterators; for inst...

Read more