JSON for Modern C++
Go to file
2013-07-05 14:44:45 +02:00
src - a find() function 2013-07-05 14:16:47 +02:00
test - fixes from Harro 2013-07-05 11:23:49 +02:00
.gitignore - a config file for travis 2013-07-04 10:54:16 +02:00
.travis.yml - a config file for travis 2013-07-04 10:54:16 +02:00
configure.ac - removing Autoconf version requirement to allow travis to work 2013-07-04 17:13:04 +02:00
Makefile.am - initial commit 2013-07-04 10:49:03 +02:00
README.md - a README 2013-07-05 14:44:45 +02:00

Yet another JSON class for C++

Build Status

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 file JSON.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 or double for numbers, std::map for objects, std::vector for arrays, and bool 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.