C++ JSON库 nlohmann::basic_json::binary 的用法

简介: C++ JSON库 nlohmann::basic_json::binary 的用法

简述

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);
  1. 从给定的二进制容器创建一个 JSON 二进制数组值。
  2. 从带有子类型的给定二进制容器创建一个 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.

目录
相关文章
|
9天前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
45 0
|
1月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
30 3
【C++】map、set基本用法
|
1月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
65 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
9天前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
21 0
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
177 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
JSON JavaScript 前端开发
JSON.parse()和JSON.stringify()用法
JSON.parse()和JSON.stringify()用法
73 1
|
3月前
|
JSON JavaScript 数据格式
vue写入json数据到文本中+vue引入cdn的用法
vue写入json数据到文本中+vue引入cdn的用法
62 10
|
3月前
|
JSON 前端开发 JavaScript
JSON用法
JSON用法
41 4
|
4月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
4月前
|
JSON 数据格式 C++
JSON(C++)
JSON(C++)
43 1