fix: bump SOVERSION to 28 for the removed std::string_view symbols (#1694) (#1697) The std::string_view convenience methods (Value(std::string_view), getString, operator[], get, removeMember, isMember) were exported symbols in 1.9.7 -- declared in value.h and defined out-of-line in value.cpp. After 1.9.7 the #1661/#1675 ABI-mismatch fixes made them header-only `inline`, which removed those symbols from the shared library (e.g. Value::removeMember(std::string_view)), but SOVERSION stayed at 27. Removing exported symbols is an incompatible ABI change, so consumers built against 1.9.7's libjsoncpp.so.27 fail to resolve those symbols against later builds that still claim SONAME .so.27 (issue #1694: a system jsoncpp upgrade broke cmake/NFS Ganesha with an undefined-symbol error). Bump SOVERSION 27 -> 28 so the changed ABI gets a distinct SONAME; affected consumers then get a clean rebuild requirement instead of a symbol-lookup crash, and a rebuild against 1.10.0 uses the inline methods (no symbol dependency). The symbols are intentionally not restored: an exported std::string_view symbol's presence depends on whether the library was compiled as C++17, which is the mismatch #1661 fixed.
JSON is a lightweight data-interchange format. It can represent numbers, strings, ordered sequences of values, and collections of name/value pairs.
JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings. It can also preserve existing comment in deserialization/serialization steps, making it a convenient format to store user input files.
JsonCpp is a mature project in maintenance mode. Our priority is providing a stable, reliable JSON library for the long tail of C++ development.
JsonCpp remains a primary choice for developers who require comment preservation and support for legacy toolchains where modern C++ standards are unavailable. The library is intended to be a reliable dependency that does not require frequent updates or major migration efforts.
1.y.z (master): Actively maintained. Requires C++11.
0.y.z: Legacy support for pre-C++11 compilers. Maintenance is limited to critical security fixes.
00.11.z: Discontinued.
Major versions maintain binary compatibility. Critical security fixes are accepted for both the master and 0.y.z branches.
[!NOTE] Package manager ports (vcpkg, Conan, etc.) are community-maintained. Please report outdated versions or missing generators to their respective repositories.
meson wrap install jsoncpp
For projects requiring a single-header approach, JsonCpp provides a script to generate an amalgamated source and header file.
You can generate the amalgamated files by running the following Python script from the top-level directory:
python3 amalgamate.py
This will generate a dist directory containing jsoncpp.cpp, json/json.h, and json/json-forwards.h. You can then drop these files directly into your project's source tree and compile jsoncpp.cpp alongside your other source files.
Documentation is generated via Doxygen. Additional information is available on the Project Wiki.
JsonCpp is licensed under the MIT license, or public domain where recognized. See LICENSE for details.