Boost C++ Libraries Home Libraries People FAQ More


Frequently Asked Questions

"Isn't simdjson faster?"

These libraries are not comparable. The output of the simdjson parser is a read-only structure. In other words, it can't be changed, and the only way to create one is by parsing a JSON string. On the other hand, Boost.JSON allows you to modify the container holding the parsed JSON, or even build a JSON document from scratch through the container interface.

"I want to parse directly into my own data structures"

The purpose of this library is to enable algorithms which implement JSON functionality in their public interfaces to be interoperable, by providing a value type that meets the bar for vocabulary type suitability. Parsing directly into a user defined type offers some advantages but is not the goal of the library. However, users who wish to parse directly into their own types may implement a custom handler for this purpose.

"Why not use a standard Allocator?"

Using standard allocators would require that value be declared as a class template, which would impose an additional compilation burden. By avoiding the template, most of the function definitions in the library can be excluded from the headers and emitted in a separate static or dynamic library.

"Why use storage_ptr over polymorphic_allocator?

polymorphic_allocator treats the memory resource as a reference with respect to ownership. Boost.JSON uses a reference counted smart pointer container to simplify the lifetime management of memory resources. In addition to being reference counted, storage_ptr can function as an uncounted reference wrapper around a memory_resource.

"Why string instead of std::string?"

The string provided by the library uses the storage_ptr allocator model, has the same interface on all C++ versions, and has an optimized class layout to keep the size of JSON values small. string also implements an improved interface that replaces extraneous overloads with ones that use string_view.