Boost
arrow_drop_down
Boost.Json
M
D

本次发布

Vinnie Falco
Vinnie Falco
作者
Krystian Stasiowski
Krystian Stasiowski
作者
Dmitry
Dmitry
维护者
sdarwin
sdarwin
贡献者
Nigel Stewart
Nigel Stewart
贡献者

依赖项

已移除

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[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

全部时间

Dmitry Arkhipov
Dmitry Arkhipov
贡献者
Peter Dimov
Peter Dimov
贡献者
Gudmundur Adalsteinsson
Gudmundur Adalsteinsson
贡献者
Dogan Ulus
Dogan Ulus
贡献者
Matt Borland
Matt Borland
贡献者
Mikhail Khachayants
Mikhail Khachayants
贡献者
Alan de Freitas
Alan de Freitas
贡献者
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
贡献者
Max Kellermann
Max Kellermann
贡献者
Evan Lenz
Evan Lenz
贡献者
Lukas Friembichler
Lukas Friembichler
贡献者
Liang Yan
Liang Yan
贡献者