【QT进阶】Qt http编程之nlohmann json库使用的简单介绍

往期回顾

【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客

【QT进阶】Qt http编程之用户登录注册功能实现-CSDN博客

【QT进阶】Qt http编程之json解析的简单介绍-CSDN博客

 【QT进阶】Qt http编程之nlohmann json库使用的简单介绍

一、nlohman json库

1、C++常用Json库

Jsoncpp
boost ison
Qt Json (不推荐使用)
nlohman::json (推荐使用)下

Qt有json解析相关的类,但是并不推荐使用,原因很简单,Qt中json解析的相关类只在qt中有用,为了避免以后不用qt就不会解析json了,建议是使用nlohmann/json,这个json适用于任何C++框架

2、什么是 nlohman::json

2.1下载地址

git repo: https://github.com/nlohmann/json

2.2基本介绍

nlohmann是一个C++的JSON库,它提供了方便的方式来解析、生成和操作JSON数据。该库由nlohmann编写,是一个开源项目,被广泛应用于C++开发中。

nlohmann库提供了简单易用的API,可以轻松地将JSON数据解析为C++对象,或者将C++对象序列化为JSON数据。它支持各种数据类型,包括字符串、数字、布尔值、数组和对象等。我们可以使用简洁的语法来访问和操作JSON数据,使得编写JSON处理代码变得更加简单和高效。

除了基本的JSON解析和生成功能,nlohmann库还提供了一些高级功能,如JSON合并、JSON差异比较、JSON数据查询等。这些功能可以帮助我们更方便地处理复杂的JSON数据,提高代码的可维护性和可读性。

二、具体解析示例

1、引入头文件

nlohman:json只需要一个头文件json.hpp,不需要编译成lib,直接放到项目中即可使用

#include <iostream>
#include "json.hpp"
#include <string>//取别名方便下面使用
using json_t = nlohmann::json;using namespace std;

2、具体思路

2.1自定义json数据
    //如果是没有多层嵌套的看一下怎么拿到json_t jRawdata; //定义一个json对象jRawdata["username"] = "jackli";jRawdata["pwd"] = "123456";
2.2dump方法序列化 

 这个适用于json格式只有一层的

    // 序列化,把json数据转成stringstring _rawdata = jRawdata.dump();cout << _rawdata << endl;
2.3parse方法反序列化 
    // 反序列化,把string数据转成jsonstring json_str = R"({"date": "20220701","level": 1,"msg": "register account","status": "success","username": "jackli"})";try {//关键的parse方法json_t j2 = json_t::parse(json_str);string date = j2["date"];cout << date << endl;}
2.4异常的catch参数 
catch (std::exception& e){}

3、整体代码

int main()
{//如果是没有多层嵌套的看一下怎么拿到json_t jRawdata; //定义一个json对象jRawdata["username"] = "jackli";jRawdata["pwd"] = "123456";// 序列化,把json数据转成stringstring _rawdata = jRawdata.dump();cout << _rawdata << endl;// 反序列化,把string数据转成jsonstring json_str = R"({"date": "20220701","level": 1,"msg": "register account","status": "success","username": "jackli"})";try {//关键的parse方法json_t j2 = json_t::parse(json_str);string date = j2["date"];cout << date << endl;}catch (std::exception& e){cout << "json parse failed" << endl;return -1;}cout << "解析json数组" << endl;if (parse_array() != 0){cout << "parse array failed" << endl;}return 0;
}

三、多层嵌套json数据获取 

1、整体代码

int parse_array()
{string jsonstr = R"({"id":"2022","name":{"EnglishName":"JackMa"},"title":[{"company":"taobao", "position" : "AAA", "salary" : "10000"},{ "company":"zhifubao","position" : "CCC","salary" : "890898" },{ "company":"pingtouge","position" : "KKK","salary" : "76843" }]})";//都放在try-catch语句里try{//先用一个parse方法得到json格式数据json_t jsonObj = json_t::parse(jsonstr);//嵌套的就层层获取//"name":{"EnglishName":"JackMa"},json_t nameJson = jsonObj["name"];string engName = nameJson["EnglishName"];cout << "engName = " << engName << endl;//多层嵌套就用for循环json_t titleJson = jsonObj["title"];int size = titleJson.size();cout << "size = " << size << endl;//for (int i = 0; i < size; i++)//{//    /*//    {//   "company":"taobao", //   "position" : "AAA", //   "salary" : "10000"//  },//    *///    cout << titleJson[i]["company"] << endl;//    cout << titleJson[i]["position"] << endl;//    cout << titleJson[i]["salary"] << endl;//}//智能索引for (auto jsonItem : titleJson){cout << jsonItem["company"] << endl;cout << jsonItem["position"] << endl;cout << jsonItem["salary"] << endl;}}catch (const std::exception&){return -1;}return 0;
}

2、for循环两种形式 

        for (int i = 0; i < size; i++){/*{"company":"taobao", "position" : "AAA", "salary" : "10000"},*/cout << titleJson[i]["company"] << endl;cout << titleJson[i]["position"] << endl;cout << titleJson[i]["salary"] << endl;}
        //智能索引//jsonItem 是一个自动推导的变量,会依次表示 titleJson 中的每个 JSON 对象。for (auto jsonItem : titleJson){cout << jsonItem["company"] << endl;cout << jsonItem["position"] << endl;cout << jsonItem["salary"] << endl;}

以上就是Qt里nlohmann json库使用的简单介绍。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

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

相关文章

Github 2024-04-22 开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4C++项目2Go项目2JavaScript项目1TypeScript项目1非开发语言项目1Zig项目1免费编程书籍和学习资源清单 创建周期:3762 天协议类型:…

Docker 哲学 - docker save | load | export | import 及实践

当我们说 "归档文件包含了容器的所有文件&#xff0c;但不包含容器的元数据和配置"&#xff0c;我们是指 docker export 命令导出的 tar 归档文件包含了容器的文件系统中的所有文件&#xff0c;包括应用程序、库、数据等。但是&#xff0c;这个归档文件不包含关于容器…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C&#xff0c;一个CPU去执行他们&#xff0c;有几种方式 1、一个cpu按顺序执行ABC&#xff0c;这就是串行…

go语言并发实战——日志收集系统(六) 编写日志收集系统客户端

上节回顾 在上一篇文章中我们介绍了编写客户端的四个步骤&#xff0c;分别是&#xff1a; 读取配置文件&#xff0c;寻找日志路径初始化服务根据日志路径l来收集日志将收集到的日志发送Kafka中 关于上述的内容博主画了一个思维导图(有点丑&#xff0c;大家勉强看看&#xff0…

燃冬之yum、vim和你

了解了很多指令和权限&#xff0c;搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩&#xff0c;也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢&#xff1f; 首先来举个生活中常见点的例子&#xff1a;比如我的手机是华为…

Leetcode 20:有效的括号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

【项目部署-apache】windows系统下apache部署django+channels

一、系统环境 1、原生的python3.8.5&#xff08;默认安装&#xff0c;不更改安装目录&#xff09;&#xff0c;不要使用Anaconda做虚拟环境。 2、在windows系统下需要&#xff0c;mod_wsgi 模块。 创建虚拟环境&#xff1a;(在当前目录下创建名为 gzgs_alert 的虚拟环境) py…

Tensor张量的属性dim、type、size、shape、numel的使用方法介绍

本文重点 Tensor张量有一些常用的属性&#xff0c;我们可以通过这些基本的属性判断张量的类型&#xff0c;维度&#xff0c;以及元素个数&#xff0c;本节课程我们将对tensor属性进行简单的介绍。 代码 import torch import numpy as np atorch.Tensor(2,3,4) print(a) prin…

【论文笔记 | 异步联邦】 FedBuff

1. 论文信息 Federated Learning with Buffered Asynchronous Aggregation&#xff0c;International Conference on Artificial Intelligence and Statistics&#xff0c;2022&#xff0c;ccfc 2. introduction 2.1.1. 背景&#xff1a; 同步 FL &#xff0c;随训练过程中…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型&#xff0c;可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型&#xff1a; OpenCV&#xff1a;Open…

APP开发_ js 控制手机是否显示状态栏

1 Android 控制手机显示或隐藏状态栏的方法 1.1 使用 View 的 setSystemUiVisibility 方法 这个方法允许设置系统 UI 的可见性&#xff0c;包括状态栏。你可以通过组合不同的标志来实现不同的效果。 示例代码&#xff1a; Override protected void onCreate(Bundle saved…

给字符串添加加粗标签(AC自动机+Python)

可以暴力解决&#xff0c;但是为了锻炼一下ac自动机的编程&#xff0c;我们使用ac自动机。 ac自动机主要维护两个列表&#xff0c;一个列表ch&#xff0c;ch[f][idx]表示从父节点f向idx这个方向走&#xff0c;走到的节点。另一个列表nex&#xff0c;nex[i]表示节点i回跳边的节…

01 【哈工大_操作系统】x86_64 常用寄存器大全

在学习CPU底层技术的时候&#xff0c;难免会接触到各式各样的寄存器。尤其是在使用汇编语言编写操作系统时&#xff0c;寄存器更是必不可少的。因此&#xff0c;这篇文章将来详细聊聊 x86_64 架构中的所有寄存器&#xff0c;按照从 常用->不常用 的顺序来进行介绍。 首先&a…

操作系统的特性

操作系统的性质 并发性 操作系统支持多道程序设计&#xff0c;即允许多个程序并发执行。通过进程管理和调度机制&#xff0c;操作系统能够在单个处理器上模拟出多个任务同时运行的效果&#xff0c;提高系统资源利用率和用户响应体验。并发性也要求操作系统具备进程同步、互斥和…

Spark-机器学习(4)回归学习之逻辑回归

在之前的文章中&#xff0c;我们来学习我们回归中的线性回归&#xff0c;了解了它的算法&#xff0c;知道了它的用法&#xff0c;并带来了简单案例。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请…

Syncovery for Mac v10.14.3激活版:文件备份和同步工具

Syncovery for Mac是一款高效且灵活的文件备份与同步工具&#xff0c;专为Mac用户设计&#xff0c;旨在确保数据的安全性和完整性。该软件支持多种备份和同步方式&#xff0c;包括本地备份、网络备份以及云备份&#xff0c;用户可以根据实际需求选择最合适的方案。 Syncovery f…

信息系统项目管理师0062:需求分析(5信息系统工程—5.1软件工程—5.1.2需求分析)

点击查看专栏目录 文章目录 5.1.2需求分析1.需求的层次2.需求过程3.UML4.面向对象分析记忆要点总结5.1.2需求分析 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。根据IEEE的软件工程标准词汇表,软件需求是指用户解决问题或达到目标所需的条件或能力,是…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标。 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 打包 依据不一样的需求&#xff0c; 详情请查看 https://docs.qq.com/sheet/DUEdqZ2l…

多元函数泰勒公式(含黑塞矩阵)

一元函数的泰勒公式&#xff1a; 接下来&#xff0c;由一元函数有关知识&#xff0c;我们有: 注意这里的dxn中&#xff0c;应把dx看作一个整体&#xff0c;即一个微小变量的n次方 我们接下来推导微分算子&#xff1a; 接下来&#xff0c;把一元泰勒公式转为微分形式: 对于二元…

React.js 3D开发快速入门

如果你对 3D 图形的可能性着迷&#xff0c;但发现从头开始创建 3D 模型的想法是不可能的 - 不用担心&#xff01; Three.js 是一个强大的 JavaScript 库&#xff0c;它可以帮助我们轻松地将现有的 3D 模型集成到 React 应用程序中。因此&#xff0c;在本文中&#xff0c;我将深…