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.h
and 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::string
for strings,int
ordouble
for numbers,std::map
for objects,std::vector
for arrays, andbool
for 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.