当前位置: 首页 > news >正文

开源库nlohmann json使用备忘

nlohmann/json是一个用于解析JSON的开源C++库,口碑一流,无需额外安装其他第三方库,还支持单个头文件模式,使用起来非常方便直观。

1. 编译

从官网https://github.com/nlohmann/json的Release页面下载单个json.hpp即可直接使用,无需单独编译。

2. 使用示例

下面以示例的方式罗列nlohmann/json库的基本使用方法。

2.1 生成JSON

方式1

int main()
{using json = nlohmann::json;json j;j["pi"] = 3.141;j["happy"] = true;j["name"] = "Niels";j["nothing"] = nullptr;j["answer"]["everything"] = 42;j["list"] = { 1, 0, 2 };j["object"] = { {"currency", "USD"}, {"value", 42.99} };// 转成字符串std::string strJSON = j.dump(2); // 2个空格的缩进std::cout << strJSON;return 0;
}

输出如下:

{"answer": {"everything": 42},"happy": true,"list": [1,0,2],"name": "Niels","nothing": null,"object": {"currency": "USD","value": 42.99},"pi": 3.141
}

方式2

int main()
{using json = nlohmann::json;json j = {{"pi", 3.141},{"happy", true},{"name", "Niels"},{"nothing", nullptr},{"answer", {{"everything", 42}}},{"list", {1, 0, 2}},{"object", {{"currency", "USD"}, {"value", 42.99}}}};// 转成字符串std::string strJSON = j.dump(2);std::cout << strJSON;return 0;
}

输出内容与方式1一样。

方式3

int main()
{using json = nlohmann::json;json j;j["pi"] = 3.141;j["happy"] = true;j["name"] = "Niels";j["nothing"] = nullptr;json j_answer;j_answer["everything"] = 42;j["answer"] = j_answer;json j_list = json::array();j_list.push_back(1);j_list.push_back(0);j_list.push_back(2);j["list"] = j_list;json j_object;j_object["currency"] = "USD";j_object["value"] = 42.99;j["object"] = j_object;// 转成字符串std::string strJSON = j.dump(2);std::cout << strJSON;return 0;
}

输出内容与方式1一样。

2.2 解析JSON

int main()
{using json = nlohmann::json;std::string strJSON = u8R"({"answer": {"everything": 42},"happy": true,"list": [1,0,2],"name": "Niels","nothing": null,"object": {"currency": "USD","value": 42.99},"pi": 3.141})";auto jsonObj = json::parse(strJSON);std::cout << jsonObj["pi"].get<float>() << std::endl; // 3.141std::cout << jsonObj["pi"].get<double>() << std::endl; // 3.141std::cout << std::boolalpha << jsonObj["happy"].get<bool>() << std::endl; // truestd::cout << jsonObj["name"].get<std::string>() << std::endl; // Nielsassert(jsonObj["nothing"] == nullptr);std::cout << jsonObj["answer"]["everything"].get<int>() << std::endl; // 42std::cout << jsonObj["list"].size() << std::endl; // 3std::cout << jsonObj["list"][0].get<int>() << std::endl; // 1std::cout << jsonObj["list"][1].get<int>() << std::endl; // 0std::cout << jsonObj["list"][2].get<int>() << std::endl; // 2std::cout << jsonObj["object"]["currency"].get<std::string>() << std::endl; // USDstd::cout << jsonObj["object"]["value"].get<float>() << std::endl; // 42.99// 依次输出:// 1// 0// 2for (json::iterator it = jsonObj["list"].begin(); it != jsonObj["list"].end(); ++it) {std::cout << *it << std::endl;}return 0;
}

3. 异常处理

当解析和生成JSON出错时,nlohmann/json会抛出异常,因此在解析和生成JSON时,需要进行异常捕获。

int main()
{using json = nlohmann::json;std::string strJSON = u8R"({"pi": 3.141})";try {auto jsonObj = json::parse(strJSON);std::cout << jsonObj["ppp"].get<float>() << std::endl;}catch (std::exception& e) {std::cout << e.what() << std::endl;}return 0;
}

4. 判断成员是否存在

int main()
{using json = nlohmann::json;std::string strJSON = u8R"({"pi": 3.141})";auto jsonObj = json::parse(strJSON);std::cout << std::boolalpha << jsonObj.contains("pi") << std::endl; // truestd::cout << std::boolalpha << jsonObj.contains("ppp") << std::endl; // falsereturn 0;
}

欢迎访问我的个人站点:https://jiangxueqiao.com

相关文章:

开源库nlohmann json使用备忘

nlohmann/json是一个用于解析JSON的开源C库&#xff0c;口碑一流&#xff0c;无需额外安装其他第三方库&#xff0c;还支持单个头文件模式&#xff0c;使用起来非常方便直观。 1. 编译 从官网https://github.com/nlohmann/json的Release页面下载单个json.hpp即可直接使用&…...

语音识别开源框架 openAI-whisper

Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型&#xff0c;也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…...

php做的中秋博饼游戏之绘制骰子图案功能示例

先看代码 header(Content-Type:image/png); $img imagecreatetruecolor(200, 200); $white imagecolorallocate($img, 255, 255, 255); $grey imagecolorallocate($img, 100, 100, 100); $blue imagecolorallocate($img, 0, 102, 255); $red imagecolorallocate($img, …...

erlang 虚拟机优化参数

sbwt none 将CPU忙等待关闭将有助于降低系统显示的CPU使用率&#xff0c;因为开启了忙等待的BEAM&#xff0c;CPU负载并不代表真实的工作情况&#xff1b; K true 开启epoll IO模型 swt low Sets scheduler wakeup threshold. Defaults to medium. The thresh…...

网络安全能力成熟度模型介绍

一、概述 经过多年网络安全工作&#xff0c;一直缺乏网络安全的整体视角&#xff0c;网络安全的全貌到底是什么&#xff0c;一直挺迷惑的。目前网络安全的分类和厂家非常多&#xff0c;而且每年还会冒出来不少新的产品。但这些产品感觉还是像盲人摸象&#xff0c;只看到网络安…...

python爬虫试手

同事让帮忙在某个网站爬点数据&#xff0c;首次尝试爬虫&#xff0c;遇到的问题及解决思路记录下。 大体需求是需要爬取详情页内的信息&#xff0c;详情页有一定格式规律&#xff0c;但是详情页需要从列表页跳入&#xff0c;列表页中的每一条记录需要鼠标悬停才会弹出跳转链接…...

pandas 笔记:pivot_table 数据透视表

1 基本使用方法 pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean, fill_valueNone, marginsFalse, dropnaTrue, margins_nameAll, observedFalse, sortTrue)2 主要参数 dataDataFramevalues要进行聚合的列index在数据透视表索引&#xff08;index…...

C#(六十)之Convert类 和 Parse方法的区别

Convert数据类型转换类&#xff0c;从接触C#开始&#xff0c;就一直在用&#xff0c;这篇日志坐下深入的了解。 Convert类常用的类型转换方法 方法 说明 Convert.ToInt32() 转换为整型(int) Convert.ToChar() 转换为字符型(char) Convert.ToString() 转换为字符串型(st…...

暑期代码每日一练Day3:874. 模拟行走机器人

题目 874. 模拟行走机器人 分析 这道题就是个简单的模拟 主要有两点考察点&#xff1a; 对方向数组的运用 方向数组存储的是各个方向的单位向量&#xff0c;也即&#xff1a; 方向XY向北01向东10向南0-1向西-10 存储在数组中&#xff0c;则是方向数组&#xff1a; in…...

肖sir___环境相关的面试题

环境相关面试题 1、请简述多有米环境的搭建、用到了哪些工具和流程介绍? jdk、服务器、代码包、数据库 2、查看当前端口被哪个应用程序占用了&#xff1f; netstat -ntlp |grep 端口号 lsof -i &#xff1a;端口号 ps -ef|grep 端口号 3、Tomcat和Nginx的区别&#xff0c;ngi…...

代理IP、Socks5代理和SK5代理的前沿技术与未来发展趋势

代理IP的前沿技术应用 人工智能与智能代理&#xff1a;结合人工智能技术&#xff0c;代理IP可以更加智能地处理网络请求和数据流&#xff0c;提高代理效率和准确性。区块链与去中心化代理&#xff1a;通过区块链技术&#xff0c;代理IP可以实现去中心化管理和身份验证&#xf…...

VM(CentOS7安装和Linux连接工具以及换源)

目录 一、Linux意义 二、安装VMWare 三、centos7安装 1、正式安装CentOS7&#xff1a; 2、安装不了的解决方案 2.1常见问题——虚拟机开机就黑屏的完美解决办法 3、查看、设置IP地址 ① 查看ip地址&#xff1a;ip addr 或者 ifconfig&#xff0c; 注意与windows环境的区别…...

阿里云斩获 4 项年度云原生优秀案例丨阿里云云原生 6 月动态

云原生月度动态 ✦ CLOUD NATIVE 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 本栏目每月更新。 01 趋势热点 &#x1f947; 阿里云 S…...

dede图片集上传图片时出错显示FILEID的解决办法

如果遇到过这问题的&#xff0c;就可以照此方法尝试了。 某日&#xff0c;某使用deecms v5.5的网站在后台上传图片时出现如下错误&#xff1a; 作为web生手的我很是迷茫。印象里之前并没有做什么改动&#xff0c;于是百思不得其解。Google、百度、DeDe官网搜索了一大圈&#xf…...

【亲测有效】 通过mysql指令 导出数据库中表名 和 表名的备注

标题你可以使用以下MySQL指令来导出数据库中表名和表名的备注&#xff1a; SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema 你的数据库名;将上述指令中的"你的数据库名"替换为你实际使用的数据库名称&#xff0c;执行该指…...

【Nginx08】Nginx学习:HTTP核心模块(五)长连接与连接处理

Nginx学习&#xff1a;HTTP核心模块&#xff08;五&#xff09;长连接与连接处理 HTTP 基础知识大家掌握的怎么样呀&#xff1f;对于长连接这一块的内容应该也不是什么新鲜东西了吧。毕竟 HTTP1.1 都已经发布这么久了。今天主要来看的就是长连接相关的配置&#xff0c;另外还会…...

第八十五天学习记录:C++核心:内存分区模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 1、代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理 2、全局区&#xff1a;存放全局变量和静态变量以及常量 3、栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数…...

Chrome远程调试webview

网址 谷歌远程调试解决方案 https://blog.csdn.net/m0_56516186/article/details/131260563Chrome远程调试webview https://blog.csdn.net/weixin_44801980/article/details/117755550...

爬虫与反爬虫的攻防对抗

一、爬虫的简介 1 概念 爬虫最早源于搜索引擎&#xff0c;它是一种按照一定的规则&#xff0c;自动从互联网上抓取信息的程序&#xff0c;又被称为爬虫&#xff0c;网络机器人等。按爬虫功能可以分为网络爬虫和接口爬虫&#xff0c;按授权情况可以分为合法爬虫和恶意爬虫。恶…...

【机器学习】特征工程 - 字典特征提取

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 字典特征提取 一、特征提取API一、提取数字特征二、特征名字三、返回原始数据特征工…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...