一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

前言
  我之前虽了解QVariant的一些性能,但是没有与Json各种的互转。以前我解析Json后,是将其转化为我自定义的结构体,既方便看,又方便调用,就是解析转换的时候麻烦些;后续看到同事直接将Json转换为QVariant(或QVariantMap QVariantList),然后直接调用,觉得也不错,但是中间有一些迷糊的地方,所以在此处记录下来。

各种互转
  先提醒一句,这也是我常犯的错误:千万别想着一步到位,QVariant存入的是什么类型,就将其转出什么类型!!!

Json转为QVariant
QJsonObject转为QVariant,QVariant的构造函数是包含这些类型的。

复制代码
 1     QJsonObject obj;
 2     obj.insert("name1","val1");
 3     obj.insert("name2","val2");
 4     obj.insert("name3","val3");
 5     QJsonArray arr;
 6     for(int i=0;i<5;i++)
 7         arr.append(i);
 8  
 9     obj.insert("name4",arr);
10  
11     QVariant var(obj);
复制代码

当然 ,QJsonArray转为QVariant也是一样的

QVariant var2(arr);

还有,QJsonDocument转为QVariant

QVariant var3(QJsonDocument(obj));

 一般为了方便本地调用,是直接将其转化为QVariantMap、QVariantHash或QVariantList

1     QVariantList varList=arr.toVariantList();
2     QVariantMap varMap=obj.toVariantMap();
3     QVariantHash varHash=obj.toVariantHash();

使用的时候,直接调用

1     qDebug()<<"varName_1="<<varMap.value("name1").toString();
2     qDebug()<<"varName_2="<<varHash.value("name2").toString();
3     for(int i=0;i<varList.count();i++){
4         qDebug()<<varList.at(i).toInt();
5     }

QVariant转为Json

这个只需要直接转换就可以了,前提是QVariant原本存入是类型就是Json

const QJsonObject& _obj=var.toJsonObject();

 若存入QVariant的类型是QVariantMap,那么就要多一个步骤了

1     QVariant var4(obj.toVariantMap());
2  
3     const QJsonObject& __obj=QJsonObject::fromVariantMap(var4.toMap());
4     qDebug()<<__obj.value("name1").toString();

QVariant转为QByteArray
看帮助文档,可以看出QVariant有方法可以直接转化成QByteArray,就直接将其转换为QByteArray,那么你拿到的QByteArray很可能就是空的~

我还是强调存入QVariant的是什么,你就要直接将其转换为什么,至于其他的类型,再继续转换。

若存入QVariant的是QJsonObject之类

qDebug()<<QJsonDocument(var.toJsonObject()).toJson(QJsonDocument::Compact);

若存入的是QVariant的是QVariantMap之类

qDebug()<<QJsonDocument::fromVariant(var4).toJson();

若存入的是QByteArray,那么什么好说的,当然直接转换,当然,出来的结果不是空的,除非你存入的是空的字节数组 

1     QJsonDocument doc(obj);
2     QVariant var5(doc.toJson(QJsonDocument::Compact));
3     qDebug()<<var5.toByteArray();

结束语 

QVariant里存入的是什么,取出来的,类型一定要对应上!!!!

posted on   一杯清酒邀明月  阅读(537)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示