Boost
arrow_drop_down
Boost.Json
M
D

本次发布

Vinnie Falco
Vinnie Falco
作者
Krystian Stasiowski
Krystian Stasiowski
作者
Dmitry
Dmitry
维护者

依赖项

Boost.JSON

分支 master develop

Azure

Build Status

Build Status

文档

Documentation

Documentation

Drone

Build Status

Build Status

矩阵

Matrix

Matrix

Fuzzing

fuzz

Appveyor

Build status

Build status

codecov.io

codecov

codecov

Boost.JSON

概述

Boost.JSON 是一个可移植的 C++ 库,它提供了实现 https://json.org/[JavaScript Object Notation](简称“JSON”)的容器和算法。JSON 是一种轻量级的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。它基于 JavaScript 编程语言的一个子集(https://www.ecma-international.org/ecma-262/10.0/index.html[ECMA-262 标准]),目前已在 https://datatracker.ietf.org/doc/html/rfc8259[RFC 8259] 中标准化。JSON 是一种与语言无关的文本格式,但使用了 C 语言家族的程序员熟悉的约定,包括 C、C++、C#、Java、JavaScript、Perl、Python 等。这些特性使 JSON 成为理想的数据交换语言。

该库专注于一个常见且流行的用例:解析和序列化到一个名为 value 的容器,该容器包含 JSON 类型。您构建的任何 value 都可以序列化然后反序列化,保证结果将与原始值相等。您使用此库生成的任何 JSON 输出都可以在任何语言的常见 JSON 实现中读取。

value 容器设计得非常适合作为词汇类型,适用于公共接口和库,从而可以组合使用。该库将可表示的数据类型限制在大多数 JSON 实现(尤其是 JavaScript)普遍接受的范围内。解析器和序列化器都具有高性能,可以达到或超过同类最佳库的基准性能。对分配器的支持非常好。使用这些类型的代码将易于理解、灵活且高效。

Boost.JSON 提供以下功能

  • 快速编译

  • 仅需要 C++11

  • 快速流式解析器和序列化器

  • 对象键查找时间复杂度为 O(1)

  • 允许非标准 JSON 的选项

  • 易于使用的安全现代 API,支持分配器

  • 可选的仅头文件,无需链接库

访问 https://boost.ac.cn/libs/json 获取完整文档。

要求

  • 仅需要 C++11

  • 链接到已构建的静态或动态 Boost 库,或使用仅头文件(见下文)

  • -fno-exceptions 支持,自动检测

该库在其接口中严重依赖以下著名的 C++ 类型(以下称为*标准类型*)

  • string_view

  • memory_resource, polymorphic_allocator

  • error_category, error_code, error_condition, system_error

仅头文件

要作为仅头文件使用,即消除程序链接到静态或动态 Boost.JSON 库的要求,只需将以下行放在项目中一个新或现有的源文件中。

#include <boost/json/src.hpp>

MSVC 用户还必须定义宏 BOOST_JSON_NO_LIB 来禁用自动链接。

嵌入式

Boost.JSON 在嵌入式设备上表现出色。该库使用本地堆栈缓冲区来提高某些操作的性能。在 Intel 平台上,这些缓冲区较大(4KB),而在非 Intel 平台上,它们较小(256 字节)。要为嵌入式应用程序调整堆栈缓冲区大小,请在构建库或包含函数定义时定义此宏

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

支持的编译器

Boost.JSON 已在以下编译器上进行了测试

  • clang: 3.5, 3.6, 3.7, 3.8, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14

  • gcc: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11, 12

  • msvc: 14.0, 14.1, 14.2, 14.3

支持的 JSON 文本

该库期望输入文本使用 UTF-8 编码,这是所有系统间交换的 JSON 都必须遵守的 RFC 要求。同样,该库生成的文本也是有效的 UTF-8。

RFC 不允许 JSON 文本中出现字节顺序标记 (BOM),因此该库将 BOM 视为语法错误。

该库支持几种流行的 JSON 扩展。这些需要被显式启用。

Visual Studio 解决方案

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

质量保证

该库的开发基础设施包括以下提交即分析:

  • 覆盖率报告

  • 基准性能比较

  • 在 Drone.io、Azure Pipelines、Appveyor 上进行编译和测试

  • 使用 clang-llvm 和机器学习进行 Fuzzing

License

根据 Boost Software License, Version 1.0 分发。(请参阅随附的 LICENSE_1_0.txt 文件或访问 https://boost.ac.cn/LICENSE_1_0.txt

全部时间

Dmitry Arkhipov
Dmitry Arkhipov
贡献者
sdarwin
sdarwin
贡献者
Peter Dimov
Peter Dimov
贡献者
Dogan Ulus
Dogan Ulus
贡献者
Gudmundur Adalsteinsson
Gudmundur Adalsteinsson
贡献者
Matt Borland
Matt Borland
贡献者
Alan de Freitas
Alan de Freitas
贡献者
Mikhail Khachayants
Mikhail Khachayants
贡献者
KoaLaYT
KoaLaYT
贡献者
Paul Dreik
Paul Dreik
贡献者
Dima Rusyy
Dima Rusyy
贡献者
Jianyong Chen
Jianyong Chen
贡献者
Cameron Angus
Cameron Angus
贡献者
Oliver Ofenloch
Oliver Ofenloch
贡献者
LeeRiva
LeeRiva
贡献者
Vaishnav Katiyar
贡献者
Julien Blanc
Julien Blanc
贡献者
Martin Vejbora
贡献者
Rene Rivera
Rene Rivera
贡献者
Roy Bellingan
贡献者
Edward Diener
Edward Diener
贡献者
sehe
sehe
贡献者
Nigel Stewart
Nigel Stewart
贡献者
Max Kellermann
Max Kellermann
贡献者
Evan Lenz
Evan Lenz
贡献者
Lukas Friembichler
Lukas Friembichler
贡献者
Liang Yan
Liang Yan
贡献者