| src | ||
| test | ||
| .gitignore | ||
| .travis.yml | ||
| configure.ac | ||
| Makefile.am | ||
| README.md | ||
Yet another JSON class for C++
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:
-
Trivial integration. Our whole code consists of just two files: A header file
JSON.hand a source fileJSON.cc. That's it. No library, no subproject, no dependencies. The class is written in vanilla C++98 and -- if possible -- uses some features of C++11 such as move constructors. -
Intiuitve syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of C++ to achieve the same feeling in your code. Check out the examples below and you know, what I mean.
Other aspects were not so important to us:
-
Memory efficiency. Each JSON object has an overhead of one pointer and one enumeration element (1 byte). We use the following C++ data types:
std::stringfor strings,intordoublefor numbers,std::mapfor objects,std::vectorfor arrays, andboolfor Booleans. We know that there are more efficient ways to store the values, but we are happy enough right now. And by the way: Valgrind says our code is free of leaks. -
Speed. We currently implement the parser as naive recursive descent parser with hand coded string handling. It is fast enough, but a LALR-parser with a decent regular expression processor should be even faster.
-
Rigourous standard compliance. We followed the specification as close as possible, but did not invest too much in a 100% compliance with respect to Unicode support. As a result, there might be edge cases of false positives and false negatives, but as long as we have a hand-written parser, we won't invest too much to be fully compliant.
Integration
All you need to do is add
#include "JSON.h"
to the files you want to use JSON objects. Furthermore, you need to compile the file JSON.cc and link it to your binaries.
