简述
nlohmann::basic_json::binary
是一个嵌套在nlohmann::basic_json
类中的类型别名,用于表示JSON中的二进制数据。这是一个字节向量,通常是一个std::vector
类型,用于保存JSON二进制类型的数据。使用这个类型,你可以在你的JSON对象中嵌入任意的二进制数据。
nlohmann::json
库在3.8.0版本后支持JSON Schema草案的第6版,其中引入了二进制数据类型的概念。然而,二进制类型不是JSON标准的一部分,这是一个特定于nlohmann JSON库的扩展。
在使用这个类型时,可以像使用标准库中的vector类型一样进行操作。例如:
nlohmann::json j; std::vector<uint8_t> v = {1, 2, 3, 4}; j["key"] = nlohmann::json::binary(v);
以上代码会创建一个名为key
的键,其值是一个二进制数组。
nlohmann::basic_json::binary 官网说明
// (1) static basic_json binary(const typename binary_t::container_type& init); static basic_json binary(typename binary_t::container_type&& init); // (2) static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype); static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype);
- 从给定的二进制容器创建一个 JSON 二进制数组值。
- 从带有子类型的给定二进制容器创建一个 JSON 二进制数组值。
二进制值是各种二进制格式的一部分,如 CBOR,MessagePack 和 BSON。此构造函数用于创建用于序列化到这些格式的值。
参数
init
(in):包含用作二进制类型的字节的容器subtype
(in):在 CBOR,MessagePack 和 BSON 中使用的子类型
返回值
JSON 二进制数组值
异常安全性
强保证:如果抛出异常,JSON 值不会有任何变化。
复杂度
init
的大小线性;对于 typename binary_t::container_type&& init
版本,复杂度为常数。
注意
请注意,此函数之所以存在,是因为在标准值ctor中正确指定正确的模板重载很困难,因为JSON数组和JSON二进制数组都有某种形式的std::VECTOR支持。因为JSON二进制数组是一个非标准扩展,所以为了向后兼容,最好防止二进制数组类型的自动初始化,这样就不会意外发生。
示例
以下代码展示了 binary ()
的示例。
#include <iostream> #include <nlohmann/json.hpp> using json = nlohmann::json; int main() { // create a binary vector std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE}; // create a binary JSON value with subtype 42 json j = json::binary(vec, 42); // output type and subtype std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl; }
输出:
type: binary, subtype: 42
Version history
Added in version 3.8.0.