jsonobject json对象里面_Qt之JSON教程-使用篇

3614c2344599cab0e35c6c851564d022.png
以故事方式来学习如何使用Qt接口来操作JSON数据。

JSON三兄弟

老大哥QJsonValue

  • 主要用于封装JSON值,类似于QVariant。
    它能够存储以下值:

a0362ed071e10b1b85f858cbcdb8b2bc.png
  • QVariant互转
QJsonValue fromVariant(const QVariant &variant)
QVariant QJsonValue::toVariant() const
  • 可以与QJsonObjectQJsonArray互转
QJsonValue::QJsonValue(const QJsonArray &a)
QJsonObject QJsonValue::toObject() const
QJsonValue::QJsonValue(const QJsonObject &o)
QJsonArray QJsonValue::toArray() const

二哥QJsonObject

  • 负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。
  • QJsonObject与QVariantMap可以互相转换
  • 接口与QMap相似,都具有size()、insert()和remove()等操作,还可以使用标准C++迭代器模式对其内容进行迭代。
  • 直接构造使用:
QJsonObject jsonObject
{
    {"key1", 1},
    {"key2", 6.6},
    {"key3", "Hello world"},
    {"array", QJsonArray({1, 2, 3})}
};
  • 类似于QVariantMap操作:
QJsonObject jsonObject;
jsonObject["key1"] = 1;
jsonObject["key2"] = 6.6;
jsonObject.insert("key3", "Hello world");
jsonObject["array"] = QJsonArray({1, 2, 3}); 
  • 与QVariantMap互相转换
QJsonObject fromVariantMap(const QVariantMap &map)
QVariantMap QJsonObject::toVariantMap() const
  • 还可以与QVariantHash互相转换,操作类似QVariantMap转换。

三弟QJsonArray

  • 负责封装JSON数组,JSON数组是一个值列表,接口与QVariantList类似,QJsonArray与QVariantList可以互相转换。
  • QJsonList操作于QList相似,都具有size()、insert()和removeAt()等操作,还可以使用标准的C++迭代器模式对其内容进行迭代。
  • 直接赋值使用:
QJsonArray jsonArray = { 1, 6.6, QString("Hello world") };
  • 接口操作使用:
QJsonArray jsonArray;
jsonArray.append(1);
jsonArray.append(6.6);
jsonArray.insert(2, "Hello world");
  • 与QVariantList互相转换:
QJsonArray fromVariantList(const QVariantList &list)
QVariantList QJsonArray::toVariantList() const

JSON管家

一天,三兄弟玩得甚欢,管家有些烦恼,三兄弟年龄不小了,还整天捣蛋,苦不堪言,是时候帮它们解决人生大事了,让他们得老婆来管这三兄弟。管家暗暗窃喜。老夫赶紧将他们的资料(数据)转换为字符串发给对面Web端的大户人家先。

管家拿出QJsonDocument工具转换他们三兄弟的资料。

QJsonDocument(const QJsonObject &object)
QJsonDocument(const QJsonArray &array)

QByteArray toJson() const

分别将QJsonObject与QJsonArray转换为QByteArray。

QByteArray byteArray1 = QJsonDocument(jsonObject).toJson();
QByteArray byteArray2 = QJsonDocument(jsonArray).toJson();

管家看了看,拿到资料了,不知道资料是否正确,还是要确保一下就使用isNull接口验证:

bool QJsonDocument::isNull() const // 如果返回为true则JSON数据解析不正确或为空。

焦急的管家等了几天,对面Web端怎么会没有答复的。正在焦虑走来走去,是不是资料不够好?还是发送出去格式不好看,看来要给他们弄弄格式,于是就找来了生成字符串的toJson来解决。

toJson面对焦急得管家自然也不敢怠慢,立马给出解决方案。

QByteArray toJson(QJsonDocument::JsonFormat format) const
  • JsonFormat::Indented(缩进型)
{
    "key1": 1,
    "key2": 6.6
}
  • JsonFormat::Compact(紧凑型)
{"key1":1,"key2":6.6}

管家修改了一下格式发出去,很快就收到对面妹子发送过来资料数据了,要快快解析看看。

管家先将QByteArray数据转换为QJsonDocument对象,然后再转换为QJsonObject或QJsonArray即可。

QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr)

管家看了看,老夫还是有点效果的。

QJsonDocument jsonDoc = QJsonDocument::fromJson("{"address":"村口客栈见","note":"带点吃的"}");

JSON背锅者

管家又接收到了一封信,可是解析不出来,正在头皮发麻着思考到底是那一步出错了。

突然跳出一个人QJsonParseError说:管家这锅我来背,我帮你找出问题,但我又一个小小得要求,就是你也给我介绍介绍。

管家无奈只好答应。

QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson("{"note":"二哥有点帅"}", &jsonError);
qDebug()<<jsonError.errorString();

小子你可以啊,原来fromJson还有这操作。

后续

管家将此事告诉他们三兄弟,如获珍宝一样。老大哥还说,看来我单身30年就要终结了。二哥则表示要在妹子面前露一手,三弟也不甘示弱赶紧去问老爹准备点钱。

后续他们三兄弟结局如何?,是否抱得美人归?请关注下篇Qt之JSON教程-实战篇


  • 题图来源于网络
  • 文章首发于微信公众号:Qt君
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值