色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QT原生的QJson是否有更優(yōu)雅的方法來封裝一些Json對象

嵌入式應(yīng)用研究院 ? 來源:嵌入式應(yīng)用研究院 ? 作者:楊源鑫 ? 2023-10-08 09:26 ? 次閱讀

之前一直用的是cJSON庫來封裝和解析,寫久了感覺實(shí)在太丑,又難維護(hù),于是還是研究下QT原生的QJson是否有更優(yōu)雅的方法來封裝一些Json對象,果不其然,通過閱讀QT開發(fā)文檔發(fā)現(xiàn),QT封裝的Json非常強(qiáng)大,其中Json對象可以有很多種形式,我們看到qjsonobject.h中:

templateclassQMap;
typedefQMapQVariantMap;
templateclassQHash;
typedefQHashQVariantHash;
,>,>

基于模板創(chuàng)建了QMap和QHash兩種容器類型,我們先來介紹QMap和QVariantMap的應(yīng)用,在介紹QVariantMap的應(yīng)用之前,先來了解QMap以及QVariant。

1、QMap

QMap是Qt庫中的一個關(guān)聯(lián)容器,它存儲鍵值對,其中每個鍵都是唯一的。這使得你可以通過鍵值來快速查找或訪問存儲在QMap中的值。

以下是一些QMap的基本操作:

插入:使用insert()函數(shù)將一個鍵值對插入到QMap中。

獲取值:使用value()函數(shù)通過鍵來獲取值。

查找:使用find()函數(shù)查找具有給定鍵的鍵值對。

刪除:使用remove()函數(shù)刪除具有給定鍵的鍵值對。

遍歷:使用iterator(如QMapIterator或constIterator)遍歷QMap中的所有鍵值對。

下面是一個簡單的QMap使用例子:

#include
#include
#include

intmain(intargc,char*argv[])
{
QMapmap;
map.insert("One",1);
map.insert("Two",2);
map.insert("Three",3);

//使用value()函數(shù)獲取值
intone=map.value("One");
qDebug()<,>

運(yùn)行結(jié)果:

12a4a38c-6519-11ee-939d-92fbcf53809c.png

注意,QMap不保證同義詞的插入順序,即如果插入相同的鍵,第二個插入的鍵值對將出現(xiàn)在QMap的末尾。如果需要保持插入順序,可以使用QMap,其中QList存儲與該鍵關(guān)聯(lián)的值。,qlist>

2、QVariant

QVariant是一個可以存儲多種數(shù)據(jù)類型的類,它可以方便地在不同的函數(shù)、類、模塊之間傳遞數(shù)據(jù)。QVariant的用法非常簡單,只需要使用構(gòu)造函數(shù)、賦值操作符、setValue函數(shù)等方法將數(shù)據(jù)存儲到QVariant對象中,然后使用toXXX函數(shù)將QVariant對象轉(zhuǎn)換為指定類型的數(shù)據(jù)。例如:

#include
#include
#include
#include

intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);

//存儲數(shù)據(jù)
QVariantv1=10;//存儲整數(shù)
QVariantv2="hello";//存儲字符串
QVariantv3=QDateTime::currentDateTime();//存儲日期時(shí)間

//獲取數(shù)據(jù)
inti=v1.toInt();//將QVariant轉(zhuǎn)換為整數(shù)
QStrings=v2.toString();//將QVariant轉(zhuǎn)換為字符串
QDateTimedt=v3.toDateTime();//將QVariant轉(zhuǎn)換為日期時(shí)間

//輸出數(shù)據(jù)
qDebug()<

運(yùn)行結(jié)果:

12c7df14-6519-11ee-939d-92fbcf53809c.png

3、QVariantMap

QT的開發(fā)者基于QMap及QVariant的優(yōu)點(diǎn),于是開發(fā)衍生出了QVariantMap。QVariantMap是一個Qt提供的容器類,它可以存儲一組鍵值對,其中鍵是QString類型,值是QVariant類型。QVariant是一個可以存儲多種數(shù)據(jù)類型的類,包括基本類型、Qt類型和自定義類型。QVariantMap的優(yōu)點(diǎn)是可以方便地使用字符串作為鍵來訪問或修改值,而不需要像QMap那樣指定鍵的類型。QVariantMap的缺點(diǎn)是它不能保證鍵的順序,也不能存儲重復(fù)的鍵。它也有很多應(yīng)用場景,例如:

在QML中,可以使用QVariantMap作為C++JavaScript之間的數(shù)據(jù)交換格式,因?yàn)樗梢宰詣愚D(zhuǎn)換為JavaScript對象。

在Qt中,可以使用QVariantMap作為JSON對象的表示方式,因?yàn)樗梢苑奖愕厥褂肣JsonDocument和QJsonObject進(jìn)行互相轉(zhuǎn)換。

在Qt中,可以使用QVariantMap作為數(shù)據(jù)庫查詢的結(jié)果集,因?yàn)樗梢苑奖愕厥褂肣SqlQuery和QSqlRecord進(jìn)行互相轉(zhuǎn)換。

在Qt中,可以使用QVariantMap作為配置文件的存儲格式,因?yàn)樗梢苑奖愕厥褂肣Settings進(jìn)行讀寫。

QVariantMap在Json對象轉(zhuǎn)換之間的應(yīng)用,例如,有一個JsonRpc2.0的請求對象:

{
jsonrpc:"2.0",
id:1,
method:"Set/LedStatus",
params:{
"color":"blue",
"status":"on"
}
}

編寫一個程序封裝一個基于JsonRpc2.0的請求對象:

QByteArrayJsonRpc2ProcotolPacket(intId,QStringMethod,constQVariantMap&_Params)
{
QJsonObjectRootObject;
QJsonObjectParams=QVariant(_Params).toJsonObject();
RootObject.insert("jsonrpc","2.0");
RootObject.insert("id",Id);
RootObject.insert("method",Method);
RootObject.insert("params",Params);
QJsonDocumentJsonDoc(RootObject);
returnJsonDoc.toJson();
}

應(yīng)用主程序調(diào)用:

#include
#include
#include
#include
#include

/*
*Rpc結(jié)構(gòu)
{
jsonrpc:"2.0",
id:1,
method:"Set/LedStatus",
params:{
"color":"blue",
"status":"on"
}
}
*/

QByteArrayJsonRpc2ProcotolPacket(intId,QStringMethod,constQVariantMap&_Params)
{
QJsonObjectRootObject;
QJsonObjectParams=QVariant(_Params).toJsonObject();
RootObject.insert("jsonrpc","2.0");
RootObject.insert("id",Id);
RootObject.insert("method",Method);
RootObject.insert("params",Params);
QJsonDocumentJsonDoc(RootObject);
returnJsonDoc.toJson();
}

intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
//使用QVariantMap封裝參數(shù)對象部分的數(shù)據(jù)結(jié)構(gòu)
constQVariantMap&ParamsObject={
{"color","blue"},
{"status","on"}
};
QByteArrayJsonStr=JsonRpc2ProcotolPacket(15,"Set/LedStatus",ParamsObject);
qDebug()<

運(yùn)行結(jié)果:

12e30096-6519-11ee-939d-92fbcf53809c.png

用起來簡直不要太爽!






審核編輯:劉清

,>,>,>,>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7514

    瀏覽量

    164007
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    519

    瀏覽量

    53889
  • C++語言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    7009

原文標(biāo)題:一種基于QT應(yīng)用程序封裝JsonRpc2.0協(xié)議請求對象的便捷方法

文章出處:【微信號:嵌入式應(yīng)用研究院,微信公眾號:嵌入式應(yīng)用研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于Qt一些問題,希望大家多多指教!

    下方便?比如,在個button上右擊,linux下沒有反應(yīng),無法改變對象的名字,按住alt+shift+r,窗口也不會預(yù)覽。同時(shí)一些漢字也不能輸入等等。是我不會用,沒有添加什么庫,還是真的是在windows下方便,求指教,新人
    發(fā)表于 03-21 22:01

    是否一種方法來確定GPIF接口在等待GPIF主機(jī)的數(shù)據(jù)時(shí)干還是空

    我用GPIF作為個32位奴隸FIFO與2位尋址。我想知道是否一種方法來確定GPIF接口在等待GPIF主機(jī)的數(shù)據(jù)時(shí)“干”還是空。 以上來自于百度翻譯 以下為原文I am using
    發(fā)表于 05-27 14:25

    什么好的方法來實(shí)現(xiàn)對某個信號的延時(shí)嗎?

    在設(shè)計(jì)中, 往往需要對某個信號做定(任意長)的延時(shí), 有沒有好的方法來實(shí)現(xiàn)?而不是采用類似移位寄存器的方法來延時(shí).
    發(fā)表于 09-19 04:23

    是否任何方法來打開/關(guān)閉由復(fù)雜I/O產(chǎn)生的PWM信號?

    Hi-ALL,是否任何方法來打開/關(guān)閉由復(fù)雜I/O產(chǎn)生的PWM信號?旦I/O由CYU3PGPIOSETFixCuffic()配置,它就開始生成信號,但是如果我想停止并恢復(fù)它呢?我只
    發(fā)表于 09-29 06:58

    是否可以在比特流的開頭保留一些固定的地址空間存儲一些易失性用戶數(shù)據(jù)?

    是否可以在比特流的開頭保留一些固定的地址空間存儲一些易失性用戶數(shù)據(jù)(例如,一些用戶參數(shù)等)?我
    發(fā)表于 08-11 07:12

    如何通過使用gm/Id的方法來簡化設(shè)計(jì)運(yùn)放?

     直想通過使用gm/Id的方法來簡化設(shè)計(jì)運(yùn)放;  但在實(shí)際設(shè)計(jì)過程中遇到較多的問題;  然后參考了一些國外的文獻(xiàn),發(fā)現(xiàn)他們好多用此方法設(shè)計(jì)OTA;如果是常規(guī)的
    發(fā)表于 06-24 07:37

    JSON是什么?如何去創(chuàng)建JSON

    是鍵值對組成,使用大括號包圍,每個鍵由引號括起來,鍵值使用冒號分割,多組鍵值對使用逗號分割。JSON訪問:json本身就是對象json
    發(fā)表于 07-09 07:06

    更優(yōu)雅的方式去實(shí)現(xiàn)個Verilog版的狀態(tài)機(jī)

    的話相對來說還算容易,而當(dāng)我們狀態(tài)機(jī)較大時(shí)狀態(tài)機(jī)的維護(hù)和閱讀就有點(diǎn)兒費(fèi)力了。那么我的狀態(tài)及能否這么描述呢?是否種讀偽代碼的感覺呢?做真正的狀態(tài)描述很遺憾,上述寫法并不是偽代碼,而
    發(fā)表于 07-13 14:56

    軟件是否安全的方法來檢測運(yùn)行軟件的是哪個MCU?

    MCU 使用個軟件。如果軟件可以檢測到 MCU 類型,基于此信息可以設(shè)置更高的 CPU 頻率,使用額外的定時(shí)器等。根據(jù)文檔,用戶軟件無法訪問 DBGMCU_IDCODE 和 DBGMCU_CR 寄存器(僅在調(diào)試模式下)。軟件是否
    發(fā)表于 12-05 09:24

    是否適當(dāng)/安全的方法來取消初始化FS26?

    您好,我想問是否適當(dāng)/安全的方法來取消初始化 FS26。我的用例是:我在 Bootloader 軟件中讓 FS 進(jìn)入正常模式。但是如果我跳轉(zhuǎn)到應(yīng)用程序,我不能再次重新初始化它,因
    發(fā)表于 04-03 08:33

    軟件驅(qū)動程序是否種相當(dāng)簡單的方法來檢測安裝了哪個rtc設(shè)備?

    軟件驅(qū)動程序是否種相當(dāng)簡單的方法來檢測安裝了哪個 rtc 設(shè)備?我們從 PCF2127 開始,但由于其他原因正在重新設(shè)計(jì),并且由于 NRND 的 PCF2127 狀態(tài),考慮轉(zhuǎn)向 P
    發(fā)表于 04-06 07:31

    充電的控制方法哪些?

    充電的控制方法哪些? 為了防止電池過充,需要對充電終點(diǎn)進(jìn)行控制,當(dāng)電池充滿時(shí),會有一些特別的信息可利用來判斷充電是否達(dá)到終點(diǎn)。
    發(fā)表于 10-24 10:20 ?708次閱讀

    分享一些相對簡單的方法來提升自己的數(shù)據(jù)安全性

    現(xiàn)如今,大數(shù)據(jù)云存儲普及程度越來越高,而無疑其信息的私密性也有被泄漏的風(fēng)險(xiǎn),由此引起的數(shù)據(jù)安全問題是不容忽視的。不管所使用的系統(tǒng)采用何種構(gòu)造,用戶都可以通過一些相對簡單的方法來提升自己的數(shù)據(jù)安全性。
    的頭像 發(fā)表于 02-06 10:35 ?6915次閱讀

    如何使用簡單的方法來監(jiān)控打印機(jī)是否仍在運(yùn)行

    電子發(fā)燒友網(wǎng)站提供《如何使用簡單的方法來監(jiān)控打印機(jī)是否仍在運(yùn)行.zip》資料免費(fèi)下載
    發(fā)表于 10-28 16:12 ?0次下載
    如何使用簡單的<b class='flag-5'>方法來</b>監(jiān)控打印機(jī)<b class='flag-5'>是否</b>仍在運(yùn)行

    JSON的使用方法

    JSON個標(biāo)記符序列。這套標(biāo)記符包括: 構(gòu)造字符、字符串、數(shù)字和三個字面值 。 構(gòu)造字符 JSON包括六個構(gòu)造字符,分別是:左方括號、右方括號、左大括號、右大括號、冒號與逗號。 JSON
    的頭像 發(fā)表于 10-31 16:42 ?930次閱讀
    <b class='flag-5'>JSON</b>的使用<b class='flag-5'>方法</b>
    主站蜘蛛池模板: 二色AV天堂在线| 久久国产香蕉| 丹麦1o一19sex性hdhd| 福利片福利一区二区三区| 囯产愉拍亚洲精品一区| 国产精品免费视频能看| 国产麻豆精品久久一二三| 国产午夜精品久久理论片| 精品亚洲视频在线观看| 麻豆成人久久精品二区三区网站 | 亚洲爱视频| 永久免费在线观看视频| 99精品国产自在自线| 儿子日母亲B好爽| 好姑娘社区在线视频| 麻豆国产人妻欲求不满| 日本高清免费在线观看| 性色欲情网站IWWW九文堂| 与嫂子同居的日子在线观看| JEALOUSVUE成熟老师APP| 国产精品福利片| 久久亚洲欧美国产综合| 日本久久和电影| 亚洲精品蜜桃AV久久久| 18日本人XXXXXX18| 成人无码国产AV免费看直播| 国产最新地址| 男人插曲女人身体视频| 丝袜美腿美女被狂躁在线观看| 亚洲欧洲日产国码久在线| 97视频在线播放| 国产人妻午夜无码AV天堂| 老师洗澡让我吃她胸的视频| 肉色欧美久久久久久久蜜桃| 一个人在线观看的视频| 成人欧美一区二区三区白人| 黄 色 网 站 免 费 涩涩屋| 欧美亚洲国产激情一区二区| 亚洲精品国产SUV| RUNAWAY韩国动漫免费网| 黄色三级图片|