Releases: nlohmann/json
JSON for Modern C++ version 3.12.0
Release date: 2025-04-11
SHA-256: aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63 (json.hpp), b8cb0ef2dd7f57f18933997c9934bb1fa962594f701cd5a8d3c2c80541559372 (include.zip), 42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa (json.tar.xz)
Summary
This release fixes some bugs found in the 3.11.3 release and adds some new features.
All changes are backward-compatible.
π° Note you can support this project via GitHub sponsors or PayPal.
Key updates and enhancements
- Diagnostic byte positions: A new macro,
JSON_DIAGNOSTIC_POSITIONS
, introduces member functions to query the byte positions of values in the input they were parsed from. When enabled, this information is also included in exceptions to help pinpoint errors. #4517 #4455 #4570 #4569 #4572 #4571 #4579 #4585 #4561 - Enhanced conversion macros: The conversion macros for arbitrary types now include several upgrades:
- Support for
std::optional
: The library now supports conversions from/tostd::optional
types when compiled with C++17. #1749 #4036 - Flexible string compatibility: Functions
patch
,diff
, andflatten
now work with arbitrary string types. #4536 #4134 #4613 #4019 - Binary format enhancements:
- The BJData mapping now supports draft 3, including optimized binary array types. #4513 #4588
- The BSON mapping has added support for unsigned 64-bit integers. #4590 #4535 #3894
- The
get_number
function used in the binary format implementations has been optimized to read multiple bytes at once. #4391
- Multidimensional array conversion: Multidimensional C-style arrays can now be directly converted to JSON. #4262 #4248
- Filesystem paths in UTF-8: The conversions from/to
std::filesystem::path
are now encoded to UTF-8 strings by default on all operating systems. #4271 #4631 - CMake 4.0 support. By adjusting the CMake minimal version to 3.5, CMake 4.0 can be used without warning or error. #4709
Changes and fixes
- The
iteration_proxy
is now astd::forward_iterator
instead of just anstd::input_iterator
. This allows more use cases whenitems()
is fed into C++20std::views
. The iterator always satisfied all requirements for a forward iterator, but was exposed as only an input iterator by the used iterator tag. #4371 #4372 - Fix the conversion from enums with unsigned underlying type to JSON. #4236 #4237
- Fix GDB pretty printer which was broken since
m_data
added. #4343 #4309 - Update natvis to reflect 3.11.3 and the current structure of
basic_json
. #4451 #4438 #4438 - Fix crash when passing
nullptr
toparse
function expectingFILE*
. Instead, now an exception is thrown. #4485 #4487 - Fix number parsing such that integers are not parsed to float when
EINTR
set inerrno
. #4506 - Fix SAX output of
number_float
to be locale-independent. #4505 #4084 - Fix iterators to allow comparing default-initialized iterators. #4512 #4493
- Fix return value of
get_ptr
for unsigned integers. #4525 #4475 - Fix regression of #2755 and replace
EOF
withchar_traits
. #4532 - Fix extended diagnostics to not trigger an assertion. #4537 #3915
- Fix
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
throw an exception with an empty json #4507 #4508 - Modernize integer comparison. #4577 #4559
- Serialize empty tuple into
[]
instead ofnull
. #4594 #4530
Warnings
The quality assurance page gives an overview of the warning flags used during the tests.
Compiler warnings
- Suppress
weak-vtables
warning for exceptions. #4500 #4087 - Add 40+ GCC warning flags for GCC 14.2.0. #4524
- Fix ignored attribute warning during build. #4670
- Add explanation for suppressed CodeQL issues. #4362 #4361
- Move compiler flags to separate CMake files (GCC, Clang). #4560
Clang-Tidy
- Suppress warnings
modernize-use-std-numbers
,
readability-redundant-member-init
, andbugprone-unused-local-non-trivial-variable
. #4276 - Suppress warnings
modernize-type-traits
andmodernize-avoid-c-arrays
inNLOHMANN_JSON_SERIALIZE_ENUM
. #4497 #3924 - Suppress warning
boost-use-ranges
as we do not want to rely on Boost. #4489 - Suppress warning
modernize-use-designated-initializers
as designated initializers are a C++20 feature. #4489 - Suppress warning
modernize-use-ranges
as ranges are a C++20 feature. #4489 - Suppress warning
clang-analyzer-webkit.NoUncountedMemberChecker
as we are using pointers internally. #4701 - Fix warning
modernize-use-integer-sign-comparison
. #4558
Build
CMake
- Adjust CMake minimal version to 3.5. #4709
- Allow overriding the CMake target name via variable
NLOHMANN_JSON_TARGET_NAME
. #4483 - Add CPack support. #4459
- Adjust CMake to generate a pkg-config file that follows the pkg-config conventions. #4456
Package Managers
- Remove
alwayslink=True
Bazel flag. #4396 - Improve Bazel support by switching to Bzlmod. #4584
- Add VisionOS support to Swift Package Manager
Package.swift
definition file. #4611 - Remove wsjcpp package manager support. #4623
CI
Tests
- Add test for libstdc++. #4495
- Skip enum tests when
JSON_DisableEnumSerialization=ON
. #4504 #4384 - Add a build step to build the documentation. #4549
- Fix the coverage job. #4595
- Add comment on reproducible builds. #4494 #4496
Infrastructure
- Remove unsupported
macos-11
image; the following Xcode versions are no longer tested in the CI: '11.7', '12.4', '12.5.1', '13.0'. #4489 - Add
macos-13
image to test Xcode versions '14.2', '14.3', '14.3.1', '15.0.1', '15.1', '15.2'. #4489 - Add
macos-14
image to test Xcode versions '15.3', '15.4'. #4489 - Add
macos-15
image to test Xcode versions '16.0', '16.1'. #4489 - Test GCC versions '4.8', '4.9', '5', '6' on
json-ci
image as these versions are no longer work on the respectivegcc
images (checkout fails). #4489 - Add tests for GCC versions '13', '14'. #4489
- Add tests for Clang versions '16', '17', '18', '19'. #4489
- Update README with a table of compilers/OS used in the CI. #4489
- Apply security best practices by StepSecurity. #4539 #4546 #4058 #4547 #4550 #4551
- Use Dependabot to automatically update GitHub actions and Python tools used in the CI. #4489 #4541 #4540 #4543 #4544 #4545 #4542 #4548 #4557 #4567 #4600 #4601 #4602 #4603 #4604 #4615 #4614 #4616 #4617 #4620 #4624 #4625 #4634 #4635 #4646 #4648 #4652 #4659 #4661 #4664 #4665 #4668 #4672 #4680 #4683 #4688 #4689 #4695 #4697 #4698 #4700 #4707 #4711 #4715 #4716 #4718 #4719 #4726
- Use
ubuntu-latest
image to run Valgrind. #4575 - Use Clang image to run iwyu. #4574
- Adjust permissions in workflows. #4553
- Use Python to install cppcheck. #4553
- Move
requirements.txt
files for cppcheck, cpplint, and reuse to central location. #4553 - Adjust cppcheck call. #4553
- Add code exclusions to source files. #4553
- Migrate stalebot to GitHub action. #4560
- Remove deprecated
.lgtm.yml
file. #4560 - Add CI steps for C++26. #4560
- Add Xcode 16.2 (macOS) and Clang 3.4 (Ubuntu) action. #4560
- Simplify Ubuntu workflow to use
ubuntu-latest
more often and reduce dependencies to more exotic containers. #4560 - Add DCO requirement: all commits since January 17, 2025, need to be signed off. #4560
- Remove
.pre-commit-config.yml
file. #4560 - Pull update for
tests/thirdparty/imapdl/filterbr.py
. #4560 - Make gdb-pretty-printer work with older Python versions. #4691 #4693
- Update the REUSE integration. #4521
Indentation and amalgamation
- Adjust and modernize flags for Artistic Style. #4277 #4275 #4573
- Fix deprecation warning in amalgamation CI check. #4227
Documentation
The documentation website contains all project documentation.
Fixed documentation
- Fix version history. #4269 #4310 #4307 #4310
- Remove broken link in Contribution Guidelines. #4274 #4486
- Fix custom data source example in README. #4335
- Fix an example to catch an exception by reference. #4331
- Fix example for JSON Pointer usage. #4255
- Fix using a wrong function in documentation. #4472
- Fix for incorrect function name in a documentation example. #4342 #4334
- Fix typos. #4345 #4412 #4565 #4679 #4723
- Fix style warnings. #4516
- Fix broken links. #4516 #4560 #4605
- Fix `ci_test_api...
JSON for Modern C++ version 3.11.3
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 tovoid
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
andNLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE
). #3816 - Add Bazel build support. If you are using Bazel you can simply reference this repository using
http_archive
orgit_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. withstd::numeric_limits
and consistently usestd
-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 artifactinclude.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 notint
. #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>
forT
not equal tochar
,wchar_t
,char8_t
,char16_t
orchar32_t
is non-standard". #4163 #4179
π¨ Further Changes
CI
- Use official Clang/GCC Docker containers in the CI. #3703
- Add workflow to check if the source files are amalgamated. #3693
- Fix CI build. #3724 #3862 #3978 #3985 #4025 #4083 #4160 #4196 #4215
- Use Clang 15. #3822 #3876
- Add CIFuzz CI GitHub action. #3845
- Fix MinGW script and CI. #3892 #4175
- Removed lgtm and DroneCI and added Cirrus CI. #3890 #3906 #3935 #3937
- Set minimal permissions to Github Workflows. #3971 #3972
- Refactor amalgamation workflow to avoid dangerous use of pull_request_target. #3945 #3969
Documentation
- Add migration guide to replace deprecated library functions. #3702 #3887
- Add dark mode toggle to documentation #3726
- Fix typos in documentation. #3748 #3767 #3902 #3932 #3951 #4109 #4126 #4143 #4149 #4159 #4173
- Update Codacy link. #3740
- Bump documentation tool versions. #3781 #3872 #3891 #3934
- Add vcpkg port version badge. #3988
- Add to
CONTRIBUTING.md
thatmake pretty
is required for test updates. #4045 - Use template get instead of get in examples. #3827 #4038 #4039
- Capture exceptions by
const&
in docs. #4099 - Fix source highlighting in user defined type macros docs. #4169
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):
- The function
iterator_wrapper
is deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend 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, callbasic_json::from_cbor(ptr, ptr+len)
instead ofbasic_json::from_cbor({ptr, len})
. - The implicit conversion from JSON Pointers to string (
json_pointer::operator string_t
) is deprecated. Usejson_pointer::to_string
instead. - Comparing JSON Pointers with strings via
operator==
andoperator!=
have been deprecated. To compare ajson_pointer
p
with a strings
, converts
to ajson_pointer
first and usejson_pointer::operator==
orjson_pointer::operator!=
. #3684
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.
JSON for Modern C++ version 3.11.2
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, andnullptr
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
andat
. #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 ofstd::vector<bool>::reference
andstd::vector<bool>::const_reference
for STLs where these are the same asbasic_json::boolean_t&
andbasic_json::boolean_t
, respectively. #3677 #3678
β‘ Improvements
- Restructure inline namespace and allow version component to be disabled. See documentation. #3683 #3696 #3697 #3698
- Avoid heap allocations in BJData parser. #3637
π¨ Further Changes
Documentation
- Publish documentation on every push to
develop
branch. #3660 #3673 - Add missing examples for the public API. #3672 #3686
- Fix typo in
json_pointer
documentation. #3692
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
- This release deprecates comparing JSON Pointers with strings via
operator==
andoperator!=
. To compare ajson_pointer
p
with a strings
, converts
to ajson_pointer
first and usejson_pointer::operator==
orjson_pointer::operator!=
. #3684
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 functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend 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, callbasic_json::from_cbor(ptr, ptr+len)
instead ofbasic_json::from_cbor({ptr, len})
. - The implicit conversion from JSON Pointers to string (
json_pointer::operator string_t
) is deprecated. Usejson_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
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 optionsJSON_GlobalUDLs
to1
to import the user-defined string literals from thenlohmann::literals::json_literals
namespace into the global namespace by default. #3644 #3645 #3646
JSON for Modern C++ version 3.11.0
π 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
oroperator[]
), 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
- Allow to use
std::string_view
as object keys inat
,operator[]
,value
,erase
,find
,contains
, andcount
to avoid unnecessary allocations. #3423, #1529, #3558, #3564 - Add support to read and write the UBJSON-derived Binary JData (BJData) format (see documentation). #3336, #3461, #3463, #3475, #3479, #3493, #3491, #3492, #3490, #3500, #3502, #3503, #3505, #3513, #3514, #3519, #3523, #3541, #3543
π Bug fixes
- Allow creation of
ordered_json
objects from initializer lists. #3342, #3343, #3370 - Fix failing tests when compiling with C++20 and add support for
operator<=>
. #3207, #3446, #3472 - Fix comparison-related compilation problems in C++20 on GCC 12. #3138, #3379
- Make iterator satisfy
std::incrementable
. #3331, #3332 - Exclude
std::any
from implicit conversion. #3428, #3437 - Fix constraints on
from_json()
for strings. #3171, #3267, #3312, #3384, #3427, #3312, #3620 - Make iterators usable with
<ranges>
and range-v3. #3130, #3446 - Fix comparison of NaN values with
json
to behave likefloat
. #3409, #3446 - Add
operator<<(json_pointer)
to fix a regression after the 3.10.0 release. #3600, #3601 - Fix JSON Patch to not create missing parent objects. #3134, #3199, #3628
- Re-add
value_type
detection to distinguish string types (was broken in releases 3.10.4, and 3.10.5). #3204, #3333, #3604, #3602, #3629 - Fix latest build error in MSVC platform (was broken during development of 3.11.0). #3630
β‘ Improvements
- Allow default values for
NLOHMANN_DEFINE_TYPE_INTRUSIVE
andNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
. #2819, #3143 - Avoid clash with Arduino defines. #3338
- Improve
meta
output for MSVC. #3417 - Check and warn if a different version of the library is already included (see
JSON_SKIP_LIBRARY_VERSION_CHECK
). #3418 - Re-template
json_pointer
on string type. #3415 - Allow to create booleans from
std::vector<bool>::reference
. #3533, #3534 - Allow to use array types where iterators are pointers. #3544
- Improve performance of writing binary formats to byte vectors. #3569
- Add
patch_inplace
function to apply patches without copying. #3581, #3596 - Use
swap
by ADL to allow swapping with non-std
containers and improve error messages. #3609 - Add versioned, ABI-tagged inline namespace (see
NLOHMANN_JSON_NAMESPACE
) to avoid ODR errors when linking different versions of the library. #1539, #3360, #3588, #3590 - Move UDLs out of the global namespace (see
JSON_USE_GLOBAL_UDLS
) to avoid name clashes. #1682, #3605
Warnings
π¨ Further Changes
- Fix
_MSC_VER
version to check forstd::filesystem
. #3240 - Remove
<sstream>
dependency. #3239, #3244 - Overwork bug template to systematically request information. #3348
- Add script to test local version in Compiler Explorer. #3456
- Change the default value of the CMake parameter
JSON_MultipleHeader
toON
to always use the multi-header version unless specified otherwise. #3532 - Add option to disable default enum conversions (see
JSON_DISABLE_ENUM_SERIALIZATION
). #3536 - Add maintainer targets to create source archive
json.tar.xz
which can be used inFetchContent
. #3289, #3255 - Fix
CITATION.cff
. #3320 - Use The Pitchfork Layout (PFL). #3462
- Update Cpplint. #3454
- More intermediate folders from Visual Studio Code are added to
.gitignore
. #3572 - Add badge for https://repology.org/project/nlohmann-json/versions. #3586
- Use REUSE licensing framework. #3546 , #3633, #3635
- Install
.pc
and.cmake
files toshare
directory. #3619
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
- Improve unit tests. #3380, #3393, #3365, #3405, #3377, #3421, #3422
- Disable regression test on GCC <8.4. #3451
- Add tests for 32 bit. #3524, #3529, #3530, #3532
- Add error message if test suite cannot be found. #3584, #3585
- Add unit test to make sure
iterator_input_adapter
advances iterators correctly. #3548 - Add a unit test including
<windows.h>
. #3631
Documentation and examples
- Add more examples to documentation. #3464
- Improve documentation on supported types of
parse
andaccept
. #3245, #3246 - Add documentation on how to parse JSON Lines input. #3247
- Fix typos. #3249, #3265, #3426, #3439, #3481, #3499
- Document parsing to
ordered_json
. #3325, #3326 - Use
FetchContent_MakeAvailable
in examples. #3345, #3351 - Document requirement of using the same definition of
JSON_DIAGNOSTICS
in all linked objects. #3360, #3378 - Document fuzz testing. #3477, #3478
- Add documentation of macros and runtime assertions. #3444, #3431
- Fix documentation of JSON Pointer. #3511, #3520
- Make certain usage patterns more prominent in the README. #3557
- Document precondition for parsing from
FILE *
and add assertion. #3593 - Improve documentation. #3592
- Add documentation for comparing
json
andordered_json
. #3443, #3599 - Adjust JSON Pointer examples and add CI step for the examples. #3622
- Overwork documentation and add more examples. #3553
π₯ 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...
JSON for Modern C++ version 3.10.5
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
- Make sure C++17 filesystem conversions are only used if the compiler supports it. Furthermore, add defines
JSON_HAS_FILESYSTEM
andJSON_HAS_EXPERIMENTAL_FILESYSTEM
which can be set to0
to avoid using filesystem support altogether.std::filesystem
. #3090 #3097 #3101 #3156 #3203 - Fix a compilation error with Nvidia CUDA Compiler (NVCC). #3013 #3234
Warnings
- Fix a warning for shadowed variables. #3188 #3193
- Fix a warning on a pointless comparison. #3227 #2712 #2676 #1390 #755
β‘ Improvements
- Add a parameter to the
update
function to recursively merge objects with common keys. #3006 #3069 - Extend
std::hash
andstd::swap
to work on anynlohmann::basic_json
specializations rather than justnlohmann::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
- The mkdocs-based documentation in doc/mkdocs has been totally overworked. It now has a unified structure, more examples, and contains all information from the previous Doxygen-based documentation. The single source of truth is now the documentation on https://json.nlohmann.me and in particular the API Documentation. #3071
- Removed Wandbox online examples. #3071
- Fix typos, links, and parameter names in the documentation. #3102 #3125 #3140 #3145 #3148
- Add more examples. #3071 #3100
π₯ 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):
- Function
iterator_wrapper
are deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend operator<<(std::ostream&, const basic_json&)
instead.
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.
JSON for Modern C++ version 3.10.4
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
andstd::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):
- Function
iterator_wrapper
are deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend operator<<(std::ostream&, const basic_json&)
instead.
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.
JSON for Modern C++ version 3.10.3
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()
andend()
function. #3020
Tests and CI
- Updated the Docker image used in the CI. #2981 #2986
- Corrected the compiler version mentioned in the README file. #3040
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):
- Function
iterator_wrapper
are deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend operator<<(std::ostream&, const basic_json&)
instead.
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.
JSON for Modern C++ version 3.10.2
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 onJSON_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):
- Function
iterator_wrapper
are deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend operator<<(std::ostream&, const basic_json&)
instead.
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.
JSON for Modern C++ version 3.10.1
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
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 toOFF
. #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
- Update the Homebrew command as nlohmann-json is now in homebrew-core. #2943 #2966
- Add example for integration via vcpkg. #2944 #2954
- Fix a typo in the documentation. #2968
π₯ 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):
- Function
iterator_wrapper
are deprecated. Please use the member functionitems()
instead. - Functions
friend std::istream& operator<<(basic_json&, std::istream&)
andfriend std::ostream& operator>>(const basic_json&, std::ostream&)
are deprecated. Please usefriend std::istream& operator>>(std::istream&, basic_json&)
andfriend operator<<(std::ostream&, const basic_json&)
instead.
All deprecations are annotated with HEDLEY_DEPRECATED_FOR
to report which function to use instead.