本次发布
依赖项
已移除
| 分支 | master |
develop |
|---|---|---|
文档 |
||
矩阵 |
||
Fuzzing |
— |
|
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[Standard ECMA-262]),目前已在 https://datatracker.ietf.org/doc/html/rfc8259[RFC 8259] 中标准化。JSON 是一种与语言无关的文本格式,但它使用了 C 语言系列中程序员熟悉的约定,包括 C、C++、C#、Java、JavaScript、Perl、Python 等等。这些特性使得 JSON 成为理想的数据交换语言。
该库专注于一个常见且流行的用例:解析和序列化到名为 value 的容器以及从该容器中解析和序列化。您构建的任何 value 都可以被序列化然后反序列化,保证结果将与原始值相等。您使用该库生成的任何 JSON 输出都可以被任何语言的大多数常用 JSON 实现读取。
value 容器的设计旨在成为一个合适的词汇类型,适合在公共接口和库中使用,从而可以组合它们。该库将可表示的数据类型限制在大多数 JSON 实现(尤其是 JavaScript)普遍接受的范围内。解析器和序列化器都具有高性能,能够达到甚至超过最可比库的基准性能。分配器得到了很好的支持。使用这些类型 Thus 的代码将易于理解、灵活且高效。
Boost.Json 提供这些特性
-
快速编译
-
仅需要 C++11
-
快速流式解析器和序列化器
-
对象的常数时间键查找
-
允许非标准 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 编码,这是 RFC 对所有在系统间交换的 JSON 的要求。同样,该库生成的文本是有效的 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)
