Skip to content

Releases: nlohmann/json

JSON for Modern C++ version 3.9.1

06 Aug 11:50
db78ac1
Compare
Choose a tag to compare

Release date: 2020-08-06
SHA-256: 7804b38146921d03374549c9e2a5e3acda097814c43caf2b96a0278e58df26e0 (json.hpp), 6bea5877b1541d353bd77bdfbdb2696333ae5ed8f9e8cc22df657192218cad91 (include.zip)

Summary

This release fixes two bugs in the features introduced in release 3.9.0. The lexer did not accept consecutive comments, and ordered_json lacked some functions from json. All changes are backward-compatible.

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

🐛 Bug Fixes

  • The lexer did not accept input with two or more consecutive comments (e.g. /* one */ /* two */ []). #2330 #2332
  • The newly introduced ordered_json container did not implement the complete interface of basic_json which broke existing code when json was replaced by ordered_json, in particular when trying to call ordered_json::parse. #2315 #2319 #2331

🔨 Further Changes

  • Install pkg-config file to CMAKE_CURRENT_BINARY_DIR instead of CMAKE_BINARY_DIR #2318
  • Make installation directory of pkg-config file depend on CMAKE_INSTALL_LIBDIR. #2314
  • Fix -Wimplicit-fallthrough warning. #2333
  • Fix name of Homebrew formula in documentation. #2326 #2327
  • Fix typo in documentation. #2320

🔥 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):

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

JSON for Modern C++ version 3.9.0

27 Jul 13:55
d34771c
Compare
Choose a tag to compare

Release date: 2020-07-27
SHA-256: d8089d52d285ef2c5368eb39ae665b39ea464206b1ca674a88a915c0245ff4f0 (json.hpp), 5b9b819aed31626aefe2eace23498cafafc1691890556cd36d2a8002f6905009 (include.zip)

JSON for Modern C++ 3.9.0 is a feature release that adds four long-awaited features, some requested five years ago.

  • The parser functions have now an option to ignore // and /* */ style comments. Though comments are not officially part of the JSON specification (see here for a discussion), comment support was a frequently requested feature, and its implementation was much less effort than continuously explaining the lack of comment support.
  • The second-most requested feature was a way to preserve the insertion order of object keys. Though this was possible via template specialization for a while, we now added a new type nlohmann::ordered_json as drop-in replacement for nlohmann::json for this.
  • To circumvent unexpected behavior, implicit conversions can now be switched off with a CMake or preprocessor option.
  • Last, but not least, a mapping between user-defined types and JSON can now be expressed using convenience macros by just listing the names of the member variables to read/write.

All changes are backward-compatible. See below the complete list of changes. See the README or the documentation for more information.

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

✨ New Features

🐛 Bug Fixes

  • Fix bug in CBOR parser where allow_exceptions was not respected. #2299 #2298
  • Fix bug in CBOR parser where incomplete binary values or strings could crash the parser. #2293 #2294

⚡ Improvements

  • Make code compile with Clang on Windows. #2259 #1119
  • Use 32-bit float encoding in MessagePack wherever this is possible without loss of precision. #2201 #2196
  • Replace std::hash<nlohmann::basic_json> with a function that does not allocate memory. #2292 #2285 #2269

🔨 Further Changes

  • Use GitLab Discussions for support and feature requests. Removed and adjusted issue templates accordingly.
  • Allow CMake 3.13+ to override options when using FetchContent. #2222
  • Add support for pkg-config. #2253
  • Add CMake option JSON_TestDataDirectory to select directory of previously downloaded test data for situations where Internet access is forbidden during testing. #2189 #2190
  • Add option to skip tests that assume the code is checked out via Git. #2189
  • Add JSON_ASSERT macro to control behavior of assert calls. #2242
  • Add CI step for GitHub CodeQL analysis (GitHub actions).
  • Add CI step for Clang 9 and Clang 10 on Windows (GitHub actions). #2259
  • Add CI step for Clang 10 CL with MSVC 2019 on Windows (GitHub actions). #2268
  • Clean up GitHub actions CI. #2300
  • Add CI step for Xcode 12 (Travis). #2262
  • Add CI step for explicit conversions (Travis, AppVeyor).
  • Remove swap specialization to support C++20. #2176
  • Add missing check for binary() function in SAX interface. #2282
  • Add test for CMake target_include_directories. #2279
  • Add test to use library in multiple translation units. #2301
  • Add more sections to new project website. #2312
  • Fix warnings. #2304 #2305 #2303 #2274 #2224 #2211 #2203
  • Cleanup maintainer Makefiles. #2264 #2274
  • Improve documentation. #2232
  • Fix inconsistency in int-to-string function. #2193

🔥 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.8.0

14 Jun 15:45
e7452d8
Compare
Choose a tag to compare

Release date: 2020-06-14
SHA-256: be7bbfbc7c62c35aa6f27dfbdd950384f247dd9f2281b5930bdaa3a6ab95eef7 (json.hpp), 8590fbcc2346a3eefc341935765dd57598022ada1081b425678f0da9a939a3c0 (include.zip)

Summary

It has been six months since the last release, and a lot of minor changes and bug fixes have accumulated. Nonetheless, JSON for Modern C++ 3.8.0 is a feature release.

  • With binary values we greatly extend the support for binary formats such as CBOR, BSON, or MessagePack. By adding a new value type to the JSON class, binary values can be read and written, and even shared between different formats. See the documentation for examples.

  • Furthermore, we overworked the input adapters; that is, the way input is read by the parsers. Now any container is supported via the LegacyInputIterator concept. See the documentation for examples. At the same time, we could improve the performance by 3-10%.

All changes are backward-compatible. See below the complete list of changes.

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

✨ New Features

  • The library now supports binary values for CBOR (byte arrays), BSON, and MessagePack (bin, ext, fixext). The values are parsed into a byte vector for further processing. #483 #757 #1129 #1509 #1662 #1668 #2064 #2069 #2071 #2082 #2099
  • The input adapters have been generalized to read from any container including user-defined containers via LegacyInputIterator. The encoding of the input is implicitly derived from the size of the value type: UTF-8 (1 byte), UTF-16 (2 bytes), and UTF-32 (4 bytes) are supported. #1813 #2145 #2174 #2178
  • CBOR now encodes floating-point numbers that can be represented by a float as float to save space in the serialization (32 bit va. 64 bit). #1719 #2044

🐛 Bug Fixes

  • The functions to parse binary formats (from_bson, from_cbor, from_msgpack, and from_ubjson) now properly respect the allow_exceptions=false parameter. #1715 #2140
  • The contains function for JSON Pointers now returns false in all cases a syntactically correct JSON Pointer refers to a non-existing value. Previously, an exception was raised if a JSON Pointer referred to an array, but did not consist of a number. #1942 #1982 #2019
  • Fixed the JSON Pointer parser which accepted numbers with leading + as array index. #1990
  • Fixed JSON Patch generation to properly use /- in the add operation for arrays. #1983 #2054
  • Fixed compilation errors using GCC 10. #1912 #1920 #2034
  • Fixed compilation errors using MSVC 2019. #1695 #1810 #1958 #2006 #2008 #2009
  • Fixed a preprocessor check for some MSVC versions. #2112 #2137
  • Fixed possible memory leak in push_back. #1971 #2025
  • Removed broken overload of the value() function with json::value_t type parameter. #2086 #2104
  • Removed values from arrays in case they are discarded by a parser callback function. Such values remained in the array with type discarded before. #1972 #2153

⚡ Improvements

🔨 Further Changes

🔥 Deprecated functions

This release deprecates 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. 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.7.3

17 Nov 11:27
e7b3b40
Compare
Choose a tag to compare

Release date: 2019-11-17
SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

Summary

This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

🐛 Bug Fixes

  • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.7.2

10 Nov 20:42
411158d
Compare
Choose a tag to compare

Release date: 2019-11-10
SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

Summary

Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

🐛 Bug Fixes

  • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835

🔨 Further Changes

  • Added WhiteStone Bolt. #1830

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.7.1

06 Nov 19:34
d98bf02
Compare
Choose a tag to compare

Release date: 2019-11-06
SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

Summary

This release fixes several small bugs in the library. All changes are backward-compatible.

🐛 Bug Fixes

  • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
  • Fixed the contains() function for JSON Pointers. #1727 #1741
  • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
  • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
  • Fixed integer truncation in iteration_proxy. #1797
  • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
  • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
  • Fixed the conversion from json to std::valarray.

⚡ Improvements

🔨 Further Changes

  • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
  • Added GCC 9 to Travis CI to compile with C++20 support. #1724
  • Added MSVC 2019 to the AppVeyor CI. #1780
  • Added badge to fuzzing status.
  • Fixed some cppcheck warnings. #1760
  • Fixed several typos in the documentation. #1720 #1767 #1803
  • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
  • Used GitHub's CODEOWNERS and SECURITY feature.
  • Removed GLOB from CMake files. #1779
  • Updated to Doctest 2.3.5.

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.7.0

28 Jul 19:24
53c3eef
Compare
Choose a tag to compare

Release date: 2019-07-28
SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

Summary

This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

✨ New Features

🐛 Bug Fixes

  • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
  • Fix a conversion to std::string_view in the unit tests. #1634 #1639
  • Fix MSVC Debug build. #1536 #1570 #1608
  • Fix get_to method to clear existing content before writing. #1511 #1555
  • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551

⚡ Improvements

🔨 Further Changes

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.6.1

20 Mar 20:04
1126c9c
Compare
Choose a tag to compare

Release date: 2019-03-20
SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

Summary

This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

🐛 Bug Fixes

  • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
  • Fixed a compilation error when <Windows.h> was included. #1531

🔨 Further Changes

  • Fixed a warning for missing field initializers. #1527

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.6.0

19 Mar 23:39
51e1564
Compare
Choose a tag to compare

Release date: 2019-03-20
SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

ℹ️ This release introduced a regression. Please update to version 3.6.1!

Summary

This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

✨ New Features

🐛 Bug Fixes

  • Fixed a compilation issues with libc 2.12. #1483 #1514
  • Fixed endian conversion on PPC64. #1489
  • Fixed library to compile with GCC 9. #1472 #1492
  • Fixed a compilation issue with GCC 7 on CentOS. #1496
  • Fixed an integer overflow. #1447
  • Fixed buffer flushing in serializer. #1445 #1446

⚡ Improvements

  • The performance of dumping integers has been greatly improved. #1411
  • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
  • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
  • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
  • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433

🔨 Further Changes

  • Added missing headers. #1500
  • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
  • Fixed documentation of parse function. #1473
  • Suppressed warning that cannot be fixed inside the library. #1401 #1468
  • Imroved package manager suppert:
    • Updated Buckaroo instructions. #1495
    • Improved Meson support. #1463
    • Added Conda package manager documentation. #1430
    • Added NuGet package manager documentation. #1132
  • Continuous Integration
    • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
    • Added Clang 7 to Travis CI.
    • Fixed AppVeyor x64 builds. #1374 #1414
  • Updated thirdparty libraries:
    • Catch 1.12.0 -> 1.12.2
    • Google Benchmark 1.3.0 -> 1.4.1
    • Doxygen 1.8.15 -> 1.8.16

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

JSON for Modern C++ version 3.5.0

21 Dec 23:03
db53bda
Compare
Choose a tag to compare

Release date: 2018-12-22
SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

Summary

This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

✨ New Features

  • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

    for (auto& [key, val] : j.items()) {
        std::cout << key << ':' << val << '\n';
    }

    #1388 #1391

  • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

🐛 Bug Fixes

  • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
  • Fixed a bug in the SAX parser for BSON arrays.

⚡ Improvements

  • Added support for Clang 5.0.1 (PS4 version). #1341 #1342

🔨 Further Changes

  • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
  • Fixed typos in the documentation. #1329 #1380 #1382
  • Fixed a C4800 warning. #1364
  • Fixed a -Wshadow warning #1346
  • Wrapped std::snprintf calls to avoid error in MSVC. #1337
  • Added code to allow installation via Meson. #1345

🔥 Deprecated functions

This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):