2020-09-08 17:47:04 -07:00
2020-09-08 17:47:04 -07:00
2020-09-08 15:14:07 -07:00
2020-09-08 17:47:04 -07:00
2020-09-08 17:47:04 -07:00
2020-09-08 17:47:04 -07:00
2020-06-30 12:34:08 -07:00
2020-06-30 12:34:08 -07:00
2020-09-07 07:18:18 -07:00
2020-07-03 11:51:58 -07:00
2020-08-22 06:37:07 -07:00
2019-09-20 11:08:06 -07:00
2020-09-08 15:14:07 -07:00

Boost.JSON

Branch master develop
Azure Pipelines Build Status Build Status
Docs Documentation Documentation
Travis Build Status Build Status
Matrix Matrix Matrix
Fuzzing --- fuzz
Appveyor Build status Build status
codecov.io codecov codecov

Boost.JSON

This is currently NOT an official Boost library.

Introduction

This library provides containers and algorithms which implement JSON ("JavaScript Object Notation"), a lightweight data-interchange format. This format is easy for humans to read and write, and easy for machines to parse and generate. It is based on a subset of the Javascript Programming Language, Standard ECMA-262. JSON is a text format that is language-indepdent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

Motivation

Boost.JSON offers these features:

  • Fast compilation
  • Require only C++11
  • Easy and safe API with allocator support
  • Fast incremental parser and serializer
  • Constant-time key lookup for objects
  • Options to allow non-standard JSON
  • Compile without Boost, define BOOST_JSON_STANDALONE
  • Optional header-only, without linking to a library

This library focuses on a common and popular use-case for JSON: parsing and serializing to and from a container called value which holds JSON types. This container is designed to be well suited as a vocabulary type appropriate for use in public interfaces and libraries, allowing them to be composed. The parser and serializer are both highly performant, meeting or exceeding the benchmark performance of the best comparable libraries. Allocators are very well supported. Code which uses Boost.JSON types will be easy to read, flexible, and performant.

Requirements

The library relies heavily on these well known C++ types in its interfaces (henceforth termed standard types):

  • string_view
  • memory_resource, polymorphic_allocator
  • error_category, error_code, error_condition, system_error

The requirements for Boost.JSON depend on whether the library is used as part of Boost, or in the standalone flavor (without Boost):

Using Boost

  • Requires only C++11
  • The default configuration
  • Aliases for standard types use their Boost equivalents
  • Link to a built static or dynamic Boost library, or use header-only (below)
  • Supports -fno-exceptions, detected automatically

Without Boost

  • Requires C++17
  • Aliases for standard types use their std equivalents
  • Obtained when defining the macro BOOST_JSON_STANDALONE
  • Link to a built static or dynamic standalone library, or use header-only (below)
  • Supports -fno-exceptions: define BOOST_NO_EXCEPTIONS and boost::throw_exception manually

Header-Only

To use Boost.JSON header-only; that is, to eliminate the requirement to modify build scripts to link to a static or dynamic library, simply place the following line in any new or existing translation unit in your project.

#include <boost/json/src.hpp>

Embedded

Boost.JSON works great on embedded devices. The library uses local stack buffers to increase the performance of some operations. On Intel platforms these buffers are large (4KB), while on non-Intel platforms they are small (256 bytes). To adjust the size of the stack buffers for embedded applications define this macro when building the library or including the function definitions:

#define BOOST_JSON_STACK_BUFFER_SIZE 1024
#include <boost/json/src.hpp>

Note

The library uses separate inline namespacing for the standalone flavor to allow libraries which use different flavors to compose without causing link errors. Linking to both flavors of Boost.JSON is possible, but not recommended.

CMake

cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/msvc.cmake
cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/msvc.cmake

License

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)

Description
A C++11 or library for parsing and serializing JSON to and from a DOM container in memory.
Readme 19 MiB
Languages
C++ 96.4%
HTML 1.2%
CMake 0.9%
Python 0.8%
Shell 0.5%
Other 0.2%