最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt?http編程之nlohmann?json庫使用詳解

 更新時間:2024年04月23日 11:05:00   作者:凌~風  
nlohmann是一個C++的JSON庫,它提供了方便的方式來解析、生成和操作JSON數(shù)據(jù),這篇文章主要為大家介紹了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數(shù)據(jù)。該庫由nlohmann編寫,是一個開源項目,被廣泛應用于C++開發(fā)中。

nlohmann庫提供了簡單易用的API,可以輕松地將JSON數(shù)據(jù)解析為C++對象,或者將C++對象序列化為JSON數(shù)據(jù)。它支持各種數(shù)據(jù)類型,包括字符串、數(shù)字、布爾值、數(shù)組和對象等。我們可以使用簡潔的語法來訪問和操作JSON數(shù)據(jù),使得編寫JSON處理代碼變得更加簡單和高效。

除了基本的JSON解析和生成功能,nlohmann庫還提供了一些高級功能,如JSON合并、JSON差異比較、JSON數(shù)據(jù)查詢等。這些功能可以幫助我們更方便地處理復雜的JSON數(shù)據(jù),提高代碼的可維護性和可讀性。

二、具體解析示例

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數(shù)據(jù)

    //如果是沒有多層嵌套的看一下怎么拿到
    json_t jRawdata; //定義一個json對象
    jRawdata["username"] = "jackli";
    jRawdata["pwd"] = "123456";

2.2dump方法序列化 

這個適用于json格式只有一層的

    // 序列化,把json數(shù)據(jù)轉成string
    string _rawdata = jRawdata.dump();
    cout << _rawdata << endl;

2.3parse方法反序列化 

    // 反序列化,把string數(shù)據(jù)轉成json
    string 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參數(shù) 

catch (std::exception& e){}

3、整體代碼

int main()
{
    //如果是沒有多層嵌套的看一下怎么拿到
    json_t jRawdata; //定義一個json對象
    jRawdata["username"] = "jackli";
    jRawdata["pwd"] = "123456";
 
    // 序列化,把json數(shù)據(jù)轉成string
    string _rawdata = jRawdata.dump();
    cout << _rawdata << endl;
 
    // 反序列化,把string數(shù)據(jù)轉成json
    string 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數(shù)組" << endl;
    if (parse_array() != 0)
    {
        cout << "parse array failed" << endl;
    }
 
    return 0;
}

三、多層嵌套json數(shù)據(jù)獲取 

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格式數(shù)據(jù)
        json_t jsonObj = json_t::parse(jsonstr);
 
        //嵌套的就層層獲取
        //"name":{"EnglishName":"JackMa"},
        json_t nameJson = jsonObj["name"];
        string engName = nameJson["EnglishName"];
        cout << "engName = " << engName << endl;
 
        //多層嵌套就用for循環(huán)
        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循環(huán)兩種形式 

        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 http編程之nlohmann json庫使用詳解的文章就介紹到這了,更多相關Qt nlohmann json內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于C++中vector的兩個小tips分享

    關于C++中vector的兩個小tips分享

    這篇文章主要給大家介紹了關于C++中vector的兩個小tips,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • Windows下CMake的下載與安裝過程

    Windows下CMake的下載與安裝過程

    CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程),這篇文章主要介紹了Windows下CMake的下載與安裝,需要的朋友可以參考下
    2022-02-02
  • C語言利用棧實現(xiàn)對后綴表達式的求解

    C語言利用棧實現(xiàn)對后綴表達式的求解

    這篇文章主要為大家詳細介紹了C語言利用棧實現(xiàn)對后綴表達式的求解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 基于C語言實現(xiàn)五子棋游戲完整實例代碼

    基于C語言實現(xiàn)五子棋游戲完整實例代碼

    這篇文章主要介紹了基于C語言實現(xiàn)五子棋游戲完整實例代碼,相信對于學習游戲開發(fā)的朋友會有一定的幫助與借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C++的static關鍵字及變量存儲位置總結

    C++的static關鍵字及變量存儲位置總結

    今天看博文時,看到了c++的static關鍵字的一些總結,還涉及到了一些代碼的存儲位置;接下來為您詳細呈現(xiàn)
    2012-11-11
  • 關于Qt?C++中connect的幾種寫法代碼示例

    關于Qt?C++中connect的幾種寫法代碼示例

    這篇文章介紹了Qt中connect函數(shù)的不同編寫方式,包括傳統(tǒng)的槽函數(shù)寫法、使用函數(shù)指針的寫法、Lambda表達式以及使用QOverload選擇重載信號的寫法,每種寫法都有其特點和適用場景,程序員應根據(jù)具體需求選擇最合適的方式,需要的朋友可以參考下
    2024-11-11
  • C/C++ MD5算法的實現(xiàn)代碼

    C/C++ MD5算法的實現(xiàn)代碼

    下面就將網(wǎng)上有關MD5算法一些知識整理一下,方面自己查閱,需要的朋友可以參考下
    2017-07-07
  • 詳解C語言中return與exit的區(qū)別

    詳解C語言中return與exit的區(qū)別

    這篇文章主要介紹了詳解C語言中return與exit的區(qū)別的相關資料,希望通過本文能幫助到大家,讓大家理解這部分內容,需要的朋友可以參考下
    2017-10-10
  • C++設置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡更新的方法

    C++設置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡更新的方法

    這篇文章主要介紹了C++設置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡更新的方法,涉及網(wǎng)絡程序設計與系統(tǒng)函數(shù)的使用,需要的朋友可以參考下
    2014-10-10
  • C語言 typedef:給類型起一個別名

    C語言 typedef:給類型起一個別名

    本文主要介紹C語言 typedef,這里整理了相關資料及簡單示例代碼幫助大家學習理解,有興趣的小伙伴可以參考下
    2016-08-08

最新評論

揭东县| 西乌珠穆沁旗| 旺苍县| 武乡县| 宜宾县| 东源县| 铜鼓县| 得荣县| 新竹市| 高密市| 江孜县| 潞城市| 威远县| 五华县| 松滋市| 南和县| 苏尼特右旗| 尚志市| 瓮安县| 衢州市| 桑植县| 舟山市| 蕲春县| 简阳市| 黄陵县| 双城市| 行唐县| 大田县| 黄陵县| 肥城市| 东源县| 兴安盟| 祥云县| 阳曲县| 泾源县| 富宁县| 台北县| 顺义区| 柞水县| 崇明县| 潮安县|