• qt操作json(QT 教程)


    JSON三兄弟

    老大哥QJsonValue

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

    类型

    QJsonValue类型

    bool

    QJsonValue::Bool

    double

    QJsonValue::Double

    string

    QJsonValue::String

    array

    QJsonValue::Array

    object

    QJsonValue::Object

    null

    QJsonValue::Null

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

    二哥QJsonObject

    • 负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。
    • QJsonObject与QVariantMap可以互相转换
    • 接口与QMap相似,都具有size()、insert()和remove()等操作,还可以使用标准C++迭代器模式对其内容进行迭代。
    • 直接构造使用:

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

    1. QJsonObject jsonObject
    2. {
    3. {
    4. "key1", 1},
    5. {
    6. "key2", 6.6},
    7. {
    8. "key3", "Hello world"},
    9. {
    10. "array", QJsonArray({
    11. 1, 2, 3})}
    12. };
    • 类似于QVariantMap操作:
    1. QJsonObject jsonObject;
    2. jsonObject["key1"] = 1;
    3. jsonObject["key2"] = 6.6;
    4. jsonObject.insert("key3", "Hello world");
    5. jsonObject["array"] = QJsonArray({
    6. 1, 2, 3});
    • 与QVariantMap互相转换
    1. QJsonObject fromVariantMap(const QVariantMap &map)
    2. QVariantMap QJsonObject::toVariantMap() const
    • 还可以与QVariantHash互相转换,操作类似QVariantMap转换。

    三弟QJsonArray

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

    JSON管家

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

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

    1. QJsonDocument(const QJsonObject &object)
    2. QJsonDocument(const QJsonArray &array)
    3. QByteArray toJson() const

      分别将QJsonObject与QJsonArray转换为QByteArray。

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

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

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

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

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

    QByteArray toJson(QJsonDocument::JsonFormat format) const
    • JsonFormat::Indented(缩进型)
    1. {
    2. "key1": 1,
    3. "key2": 6.6
    4. }
    • JsonFormat::Compact(紧凑型)
    1. {
    2. "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说:管家这锅我来背,我帮你找出问题,但我又一个小小得要求,就是你也给我介绍介绍。

      管家无奈只好答应。

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

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

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 相关阅读:
    springBoot 的默认线程池-ThreadPoolTaskExecutor
    GIS工具maptalks开发手册(二)03——渲染面
    Greenplum数据库数据分片策略Hash分布——计算哈希值和映射segment
    星巴克推出Web3平台;天啦噜,AI绘画能007了;『决策算法』电子书;合成人脸数据集;面向数据的版本控制;前沿论文 | ShowMeAI资讯日报
    《风向》——如何应对互联网变革下的知识焦虑不确定与个人成长
    linux crontab 定时任务简单了解
    科学中的人工智能:量子、原子和连续体技术概述
    Pytorch搭建循环神经网络RNN(简单实战)
    【数学建模】MATLAB应用实战系列(105)-Logistic回归——二分类(附MATLAB代码)
    基于javaweb的医疗挂号管理系统(java+springboot+freemarker+layui+mysql)
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/128104112