Json
JSON for Modern C++
Install / Use
/learn @nlohmann/JsonREADME
- Design goals
- Sponsors
- Support (documentation, FAQ, discussions, API, bug issues)
- Quick reference
- Examples
- Read JSON from a file
- Creating
jsonobjects from JSON literals - JSON as a first-class data type
- Serialization / Deserialization
- STL-like access
- Conversion from STL containers
- JSON Pointer and JSON Patch
- JSON Merge Patch
- Implicit conversions
- Conversions to/from arbitrary types
- Specializing enum conversion
- Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)
- Customers
- Supported compilers
- Integration
- License
- Contact
- Thanks
- Used third-party tools
- Notes
- Execute unit tests
Design goals
There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:
-
Intuitive syntax. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the examples below and you'll know what I mean.
-
Trivial integration. Our whole code consists of a single header file
json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular package managers. -
Serious testing. Our code is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices. See the quality assurance overview documentation.
Other aspects were not so important to us:
-
Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types:
std::stringfor strings,int64_t,uint64_tordoublefor numbers,std::mapfor objects,std::vectorfor arrays, andboolfor Booleans. However, you can template the generalized classbasic_jsonto your needs. -
Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a
std::vectororstd::map, you are already set.
See the contribution guidelines for more information.
Sponsors
You can sponsor this library at GitHub Sponsors.
:raising_hand: Priority Sponsor
:label: Named Sponsors
Further support
The development of the library is further supported by JetBrains by providing free access to their IDE tools.
Thanks everyone!
Support
:question: If you have a question, please check if it is already answered in the FAQ or the Q&A section. If not, please ask a new question there.
:books: If you want to learn more about how to use the library, check out the rest of the README, have a look at code examples, or browse through the help pages.
:construction: If you want to understand the API better, check out the API Reference or have a look at the quick reference below.
:bug: If you found a bug, please check the FAQ if it is a known issue or the result of a design decision. Please also have a look at the issue list before you create a new issue. Please provide as much information as possible to help us understand and reproduce your issue.
There is also a docset for the documentation browsers Dash, Velocity, and Zeal that contains the full [documentation](https://json.nlo

