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.

目录
相关文章
|
1月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
61 6
|
1月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
94 10
|
1月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
68 5
|
30天前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
1月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
52 1
|
1月前
|
JSON JavaScript 前端开发
JSON.parse()和JSON.stringify()用法
JSON.parse()和JSON.stringify()用法
45 1
|
2月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
39 6
|
2月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
34 1
|
25天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
11天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。