【C++】开源:nlohmann/json数据解析库配置使用

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍nlohmann/json数据解析库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

官网:https://json.nlohmann.me/

项目Github地址:https://github.com/nlohmann/json

nlohmann/json 是一个流行的 C++ JSON 库,以其简洁易用、功能强大而闻名。它提供了 C++ 与 JSON 之间的无缝转换,支持大多数现代 C++ 特性,使得操作 JSON 数据非常方便。

1.支持 C++11 及更高版本。
2.提供了简单直观的 API。
3.支持序列化和反序列化 JSON 数据。
4.支持多种数据类型(数字、字符串、布尔、数组、对象等)。
5.支持 STL 容器与 JSON 的互操作。

😊2. 环境配置

这个json库可以只使用头文件(header-only),头文件可以在仓库的release中下载。

在这里插入图片描述

😆3. 使用说明

JSON 对象的创建和序列化示例:

#include "json.hpp"
#include <iostream>int main() {// 创建 JSON 对象nlohmann::json jsonObj;// 添加数据到 JSON 对象jsonObj["name"] = "John";jsonObj["age"] = 30;jsonObj["is_student"] = false;jsonObj["skills"] = {"C++", "Python", "JavaScript"};// 序列化 JSON 对象为字符串std::string serialized = jsonObj.dump();// 打印 JSON 字符串std::cout << "Serialized JSON: " << serialized << std::endl;return 0;
}

JSON 反序列化示例:

#include "json.hpp"
#include <iostream>
#include <string>int main() {// JSON 字符串std::string jsonString = R"({"name":"John","age":30,"is_student":false,"skills":["C++","Python","JavaScript"]})";// 解析 JSON 字符串nlohmann::json jsonObj = nlohmann::json::parse(jsonString);// 访问 JSON 数据std::string name = jsonObj["name"];int age = jsonObj["age"];bool is_student = jsonObj["is_student"];std::vector<std::string> skills = jsonObj["skills"];// 打印解析的数据std::cout << "Name: " << name << std::endl;std::cout << "Age: " << age << std::endl;std::cout << "Is Student: " << is_student << std::endl;std::cout << "Skills: ";for (const auto& skill : skills) {std::cout << skill << " ";}std::cout << std::endl;return 0;
}

JSON转换为 C++ 标准数据类型:

#include "json.hpp"
#include <iostream>
#include <vector>int main() {// 创建 JSON 对象nlohmann::json jsonObj = {{"pi", 3.141},{"happy", true},{"name", "Niels"},{"answer", {{"everything", 42}}},{"list", {1, 0, 2}},{"object", {{"currency", "USD"},{"value", 42.99}}}};// 转换为 C++ 标准数据类型double pi = jsonObj["pi"];bool happy = jsonObj["happy"];std::string name = jsonObj["name"];int answer = jsonObj["answer"]["everything"];std::vector<int> list = jsonObj["list"];// 打印结果std::cout << "pi: " << pi << std::endl;std::cout << "happy: " << happy << std::endl;std::cout << "name: " << name << std::endl;std::cout << "answer: " << answer << std::endl;std::cout << "list: ";for (int i : list) {std::cout << i << " ";}std::cout << std::endl;return 0;
}

C++ 标准数据类型转换为 JSON示例:

#include "json.hpp"
#include <iostream>
#include <map>int main() {// 创建 C++ 标准数据类型std::map<std::string, int> mapData = {{"key1", 1}, {"key2", 2}, {"key3", 3}};std::vector<int> vectorData = {10, 20, 30};// 转换为 JSONnlohmann::json jsonMap = mapData;nlohmann::json jsonVector = vectorData;// 打印结果std::cout << "jsonMap: " << jsonMap.dump() << std::endl;std::cout << "jsonVector: " << jsonVector.dump() << std::endl;return 0;
}

写入 JSON 文件示例:

#include "json.hpp"
#include <iostream>
#include <fstream>int main() {// 创建 JSON 对象nlohmann::json jsonObj = {{"name", "John"},{"age", 30},{"is_student", false},{"skills", {"C++", "Python", "JavaScript"}}};// 写入 JSON 文件std::ofstream outFile("data.json");outFile << jsonObj.dump(4); // 4 表示缩进级别outFile.close();std::cout << "JSON 文件已成功写入 data.json" << std::endl;return 0;
}

读取 JSON 文件示例:

#include "json.hpp"
#include <iostream>
#include <fstream>int main() {// 读取 JSON 文件std::ifstream inFile("data.json");nlohmann::json jsonObj;inFile >> jsonObj;inFile.close();// 访问 JSON 数据std::string name = jsonObj["name"];int age = jsonObj["age"];bool is_student = jsonObj["is_student"];std::vector<std::string> skills = jsonObj["skills"];// 打印结果std::cout << "Name: " << name << std::endl;std::cout << "Age: " << age << std::endl;std::cout << "Is Student: " << is_student << std::endl;std::cout << "Skills: ";for (const auto& skill : skills) {std::cout << skill << " ";}std::cout << std::endl;return 0;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理--概述

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

Jetpack Compose实战教程(五)

Jetpack Compose实战教程&#xff08;五&#xff09; 第五章 如何在Compose UI中使用基于命令式UI的自定义View 文章目录 Jetpack Compose实战教程&#xff08;五&#xff09;一、前言二、本章目标三、开始编码3.1 先让自定义控件能跑起来3.2给自定义控件使用compose的方式赋值…

在linux系统centos上面安装php7gmp扩展

ps:在ubuntu上面安装gmp(最简单) $ sudo apt-get install php7.0-gmp然后再php.ini添加extensionphp_gmp.so <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…

C#Modbus通信

目录 1&#xff0c;辅助工具。 2&#xff0c;初识Modbus。 3&#xff0c;基于ModbusRTU的通信。 3.1&#xff0c;RTU与ASCII模式区别 3.2&#xff0c;Modbus存储区 3.3&#xff0c;报文格式 3.4&#xff0c;异常代码 3.5&#xff0c;详细文档连接 。 3.6&#xff0c;代…

2024 年第十四届亚太数学建模竞赛(中文赛项)浅析

需要完整B题资料&#xff0c;请关注&#xff1a;“小何数模”&#xff01; 本次亚太(中文赛)数学建模的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&…

纸飞机社工库

收集了一些比较好用的纸飞机社工库&#xff0c;有纸飞机的可以加一下 Space X 隐私信息查询平台https://t.me/SpaceSGK_bot?startKhbOsEdELmingeek社工库 https://t.me/ingeeksgkbot?startNzM3ODE5NDM5Nw Botnet免费社工机器人https://t.me/SGK_0001_bot?start7378194397暗…

TZDYM001矩阵系统源码 矩阵营销系统多平台多账号一站式管理

外面稀有的TZDYM001矩阵系统源码&#xff0c;矩阵营销系统多平台多账号一站式管理&#xff0c;一键发布作品。智能标题&#xff0c;关键词优化&#xff0c;排名查询&#xff0c;混剪生成原创视频&#xff0c;账号分组&#xff0c;意向客户自动采集&#xff0c;智能回复&#xf…

【C++ | 继承】C++的继承详解 及 例子源码演示

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

信用卡没逾期就万事大吉了吗?

6月28日&#xff0c;中国人民银行揭晓了《2024年第一季度支付体系概览》&#xff0c;数据显示&#xff0c;截至本季度末&#xff0c;信用卡及借贷合一卡的总量为7.6亿张&#xff0c;与上一季度相比&#xff0c;这一数字微降了0.85个百分点。同时&#xff0c;报告还指出&#xf…

AE的合成

目录 合成的概念 合成设置 预设 像素长宽比 分辨率​编辑 开始时间码和持续时间 背景颜色 合成的实战理解 在AE的操作界面中&#xff0c;当我们新建了一个项目之后&#xff0c;画面中最主要的位置显示的是新建合成 合成的概念 AE是一款专业特效合成软件&#xff0c;可…

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对一有几种方式?具体怎么操作的?

大家好&#xff0c;我是锋哥。今天分享关于 【MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f; 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询…

【记录】如何使用IDEA2023

前言&#xff1a; 记录IDEA2023的激活与安装 第一步&#xff1a;官网下载安装包&#xff1a; 下载地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 这个最好选择2023版本&#xff0c;用着很nice。 安装步骤就不详解了&#xff0c;无脑下一步就可以了…

【并发编程】-3.锁的类型、CAS、UNSAFE、原子操作

锁的类型 可重入锁和不可重入锁 可重入锁&#xff1a;一个线程可以多次抢占同一个锁&#xff1b;Synchronized、ReentrantLock都是可重入锁&#xff0c;用Synchronized进行锁的可重入测试&#xff0c;在同一个线程中定义childMethod()和childMethod2()两个方法&#xff0c;在这…

使用Github Actions自建Docker镜像仓库

使用Github Actions自建Docker镜像仓库 背景使用Github Actions自建Docker镜像仓库fork项目[docker_image_sync](https://github.com/xqxyxchy/docker_image_sync)获取云厂商容器镜像服务信息配置github secrets运行github action配置需要同步的镜像同步后效果华为云配置 背景 …

VCS+Vivado联合仿真BUG

场景&#xff1a; 在vcsvivado联合仿真过程中&#xff0c;对vivado导出的shell脚本修改&#xff0c;修改某些source文件路径&#xff0c;vcs编译时会报Permission Denied。 问题描述 对shell脚本修改如下&#xff1a; 修改仅为注释掉某一行&#xff0c;下面变为source文件新…

昇思25天学习打卡营第07天|函数式自动微分

神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#xff08;gradients&…

hid-ft260驱动学习笔记 1 - 驱动模块注册与注销

目录 1. ft260_driver_init初始化 1.1 tty设备 1.1.1 申请tty驱动设备 1.1.2 初始化tty驱动程序 1.1.3 注册tty设备 1.2 hid设备 2. ft260_driver_exit注销模块 3. 调试 hid-ft260.c的最底部可以看到该驱动的注册与注销接口的申明。 module_init(ft260_driver_init); …

eclipse ide中文件编码的修改,解决中文乱码的问题。

1、先上一张图&#xff1a; 记得之前设置过&#xff0c;但是稍微一变&#xff0c;环境编码又到了ISO-8859-1了&#xff0c;然后就出现了乱码。 2、设置eclipse的编码&#xff1a; Preferences--General -- Content Types -- Text -- Java Properties File -- Default encoding…

使用myCobot280和OAK-D OpenCV DepthAI摄像头制作一个实时脸部跟踪的手机支架!

引言 由于YouTube和Netflix的出现&#xff0c;我们开始躺着看手机。然而&#xff0c;长时间用手拿着手机会让人感到疲劳。这次我们制作了一个可以在你眼前保持适当距离并调整位置的自动移动手机支架&#xff0c;让你无需用手拿着手机。请务必试试&#xff01; 准备工作 这次我们…

Vue3从入门到精通(三)

vue3插槽Slots 在 Vue3 中&#xff0c;插槽&#xff08;Slots&#xff09;的使用方式与 Vue2 中基本相同&#xff0c;但有一些细微的差异。以下是在 Vue3 中使用插槽的示例&#xff1a; // ChildComponent.vue <template><div><h2>Child Component</h2&…