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

ops/2024/10/19 9:32:19/

往期回顾

【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.ppmy.cn/ops/10419.html

相关文章

如何用idm下载迅雷文件 idm怎么安装到浏览器 idm怎么设置中文

如果不是vip用户使用迅雷下载数据文件&#xff0c;其下载速度是很慢的&#xff0c;有的时候还会被限速&#xff0c;所以很多小伙们就开始使用idm下载迅雷文件&#xff0c;idm这款软件最大的优势就是下载速度快&#xff0c;还有就是具备网页捕获功能&#xff0c;能够下载网页上的…

苍穹外卖day7 缓存商品(redis/Spring Cache)、用户端购物车功能

文章目录 前言一、缓存菜品1. 问题说明2. 解决办法3. 代码开发 二、缓存套餐1. Spring Cache2. 实现思路 三、购物车管理1. 添加购物车1.1 产品原型1.2 接口设计1.3 数据库设计1.4 代码开发 2. 查看购物车2.1 接口设计2.2 代码开发 3. 清空购物车3.1 接口设计3.2 代码开发 4. 删…

网站推广爬虫

网站推广爬虫是一种用于帮助网站推广的工具。它可以自动地收集和分析网站相关的数据&#xff0c;以便进行市场调研、竞争分析和优化策略等工作。以下是网站推广爬的一些常见功能和特点&#xff1a; .数据收集&#xff1a;网站推广爬虫可以通过抓取网页内容、提取关键信息和分析…

【css】select实现placeholder效果

场景&#xff1a;使用select下拉选择框的时候&#xff0c;需要像其他控件一样提示默认信息。 问题&#xff1a;表单控件select没有placeholder属性。 解决方案&#xff1a;通过css实现&#xff0c;不需要js <style>select > option[disabled]{ color:#999;cursor: n…

【前端】4. CSS综合案例

1. 模拟新闻界面 <!-- 1.模拟实现新闻界面 --><!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

分享4张亚马逊云科技AWS免费云开发和AI证书(有答案)

今天给大家带来特别福利&#xff0c;一口气带来亚马逊云科技AWS4张免费云开发/AI证书(有Credly徽章&#xff0c;有答案)&#xff0c;这四门都是云开发相关的硬核知识&#xff0c;含金量极高。 主要考察如何用AWS AI服务进行开发、以及当下热门的云原生改造&#xff0c;16道题80…

Edge的使用心得与深度探索:优化浏览体验的技巧与建议

随着互联网的快速发展&#xff0c;浏览器已经成为我们日常生活中不可或缺的工具之一。在众多浏览器中&#xff0c;微软Edge凭借其稳定性、安全性和功能丰富性备受用户青睐。本文将深入探讨Edge浏览器的各种功能与技巧&#xff0c;帮助用户优化其浏览体验。 文章目录 Edge翻译插…

Java中的BIO、NIO与AIO

1.概述 I/O 模型简单的理解&#xff1a;就是用什么样的通道进行数据的发送和接收&#xff0c;很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式&#xff1a;BIO、NIO、AIO。 2.Java BIO Java BIO(Blocking I/O)&#xff1a;是传统的java io 编程&#…