Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Design Rationale

Incremental

The JSON parser is incremental because that is a versatile building-block for network wire protocols. Many other JSON parsers are restricted to the Document Object Model, wherein the entire JSON input is parsed into a parse tree before you can operate on it. If the JSON input should end up in your own C++ data structures, then the parse tree becomes an unnecessary intermediate step. In this case your program becomes both slower and consumes more memory.

A JSON DOM can be created using the incremental parser and Boost.Serialization.

Iterator

The ability of json::reader to read the input one token at the time makes it work like an iterator. The design is build around the more traditional Iterator design pattern as described in the Gang-of-Four book, instead of C++ iterators.

Numbers

JSON numbers are arithmetic - there is no distinction between integer and floating-point numbers. C++ does make that distinction, so json::reader will identify numbers either as integers (identified by the json::token::symbol::integer token) if they consist solely of digits, or as floating-point numbers (identified by the json::token::symbol::number token) if they contain a decimal-point or an exponent.

Regardless of how a number was identified, it can be converted using json::reader::value<T>() as either a C++ integer or floating-point number. This means that integer numbers that are too big to fit into a C++ integer type such as std::intmax_t can be read as a floating-point number.


PrevUpHomeNext