- Design goals
- Integration
- Examples
- Supported compilers
- License
- Thanks
- Used third-party tools
- Projects using JSON for Modern C++
- Notes
- Execute unit tests
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. -
Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind that there are no memory leaks. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.
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::string
for strings,int64_t
,uint64_t
ordouble
for numbers,std::map
for objects,std::vector
for arrays, andbool
for Booleans. However, you can template the generalized classbasic_json
to 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::vector
orstd::map
, you are already set.
See the contribution guidelines for more information.
The single required source, file json.hpp
is in the src
directory or released here. All you need to do is add
#include "json.hpp"
// for convenience
using json = nlohmann::json;