| 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`.