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

2024-04-23 06:44

本文主要是介绍【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库使用的简单介绍。

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

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

这篇关于【QT进阶】Qt http编程之nlohmann json库使用的简单介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928055

相关文章

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

gorm乐观锁使用小结

《gorm乐观锁使用小结》本文主要介绍了gorm乐观锁使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言grom乐观锁机制gorm乐观锁依赖安装gorm乐观锁使用创建一个user表插入数据版本号更新总结前言乐观锁,顾名

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.