Skip to content

JSON for Modern C++ version 3.11.3

Latest
Compare
Choose a tag to compare
@nlohmann nlohmann released this 28 Nov 21:38
· 71 commits to develop since this release
9cca280

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.