QJsonObject的使用示例

2023-11-07

介绍:负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。

1——QJsonObjec:封装了Json里的对象

接口与QMap相似,都具有size()、insert()和remove()等操作,还可以使用标准C++迭代器模式对其内容进行迭代。

使用示例:

如下图所示:我们要写入这个数据的话,怎么写进去?

QJsonObject gObj = JSONDATA.getSpecifyGroup(m_iSelectBtnIndex);
//这里读取第一个QJsonObject对象,你可以按照你的需求自己去看

//接下来我们就一层一层的读进去就可以了

//新增加effect
QJsonArray chValueArray;
for(int i = 0 ; i <  ui->cbLightChanleNum->currentText().toInt() ; i++)
{
     chValueArray.append(QJsonValue(0));
}

QJsonObject eObj  =  gObj[JSONKEY::EFFECT_JSONKEY].toObject() ;
QStringList keys = eObj.keys();
for(int i=0;i<keys.size();i++)
{
  QJsonObject sEobj = eObj[keys.value(i)].toObject();
  QJsonArray pArry = eObj[JSONKEY::PROGRAM_JSONKEY].toArray();
  for(int j=0; j<pArry.size();j++)
    {
      QJsonObject stepObj = pArry.at(i).toObject();
       for(int k = 0; k < addrArray.size(); k++)
        {
                        stepObj.insert(QString::number(addrArray.at(k).toInt()),QJsonValue(chValueArray));
        }
      pArry.replace(j,stepObj);
   }
      sEobj[JSONKEY::PROGRAM_JSONKEY] = pArry;
      eObj[keys.value(i)]=sEobj;
}
gObj[JSONKEY::EFFECT_JSONKEY] = eObj;
JSONDATA.setSpecifyGroup(m_iSelectBtnIndex,gObj);//这里是封装的存入Json文件的接口

记住一点就可以,[]前面的就是 Json数组格式,{}就是个Json对象格式

2——QJsonArray: 封装了Json里的数组

3——QJsonDocument:转换器
上文知JSON一共有两种格式,即JSON数组和JSON对象,它们最终要利用JSON完成序列化,将数据转换为对应的字符串,或者有另外一种情况是字符串转换为JSON数组和JSON对象

简单的JSON对象

{
    "Cross Platform": true,
    "From": 1991,
    "Name": "Qt"
}

 生成:

// 构建 JSON 对象
QJsonObject json;
json.insert("Name", "Qt");
json.insert("From", 1991);
json.insert("Cross Platform", true);

// 构建 JSON 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray);

qDebug() << strJson;

简单的JSON解析

QJsonParseError jsonError;
// 转化为 JSON 文档
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); 
// 解析未发生错误
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) 
{  
    if (doucment.isObject()) 
    { 
        // JSON 文档为对象
        QJsonObject object = doucment.object();  // 转化为对象
        if (object.contains("Name")) 
        {  // 包含指定的 key
            QJsonValue value = object.value("Name");  // 获取指定 key 对应的 value
            if (value.isString()) 
            {  // 判断 value 是否为字符串
                QString strName = value.toString();  // 将 value 转化为字符串
                qDebug() << "Name : " << strName;
            }
        }
        if (object.contains("From")) 
        {
            QJsonValue value = object.value("From");
            if (value.isDouble()) 
            {
                int nFrom = value.toVariant().toInt();
                qDebug() << "From : " << nFrom;
            }
        }
        if (object.contains("Cross Platform")) 
        {
            QJsonValue value = object.value("Cross Platform");
            if (value.isBool()) 
            {
                bool bCrossPlatform = value.toBool();
                qDebug() << "CrossPlatform : " << bCrossPlatform;
            }
        }
    }
}

 4——QJsonValue: 是对前面调到的数据类型的包装,C++中针对不同的数据类型有不同的声明,QJsonValue类是利用构造函数将各种数据类型进行了统一化,包装成一种类型,操作更为简单。

QJsonValue 可以封装的基础数据类型有六种

布尔类型 QJsonValue::Bool
浮点类型(包括整形) QJsonValue::Double
字符串类型 QJsonValue::String
Json 数组类型 QJsonValue::Array
Json 对象类型 QJsonValue::Object
空值类型 QJsonValue::Null


(1)各种类型可以通过 QJsonValue 的构造函数被封装为一个类对象;

(2)如果我们得到一个 QJsonValue 对象,如何判断内部封装的到底是什么类型的数据呢?

// 是否是Json数组
bool isArray() const;
// 是否是Json对象
bool isObject() const;
// 是否是布尔类型
bool isBool() const;
// 是否是浮点类型(整形也是通过该函数判断)
bool isDouble() const;
// 是否是空值类型
bool isNull() const;
// 是否是字符串类型
bool isString() const;
// 是否是未定义类型(无法识别的类型)
bool isUndefined() const;

(3)通过判断函数得到对象内部数据的实际类型之后,如果有需求就可以再次将其转换为对应的基础数据类型。

// 转换为Json数组
QJsonArray toArray(const QJsonArray &defaultValue) const;
QJsonArray toArray() const;
// 转换为布尔类型
bool toBool(bool defaultValue = false) const;
// 转换为浮点类型
double toDouble(double defaultValue = 0) const;
// 转换为整形
int toInt(int defaultValue = 0) const;
// 转换为Json对象
QJsonObject toObject(const QJsonObject &defaultValue) const;
QJsonObject toObject() const;
// 转换为字符串类型
QString toString() const;
QString toString(const QString &defaultValue) const;
  • QJsonValueQVariant互转
QJsonValue fromVariant(const QVariant &variant)
QVariant QJsonValue::toVariant() const
  • QJsonValue可以与QJsonObjectQJsonArray互转
QJsonValue::QJsonValue(const QJsonArray &a)
QJsonObject QJsonValue::toObject() const
QJsonValue::QJsonValue(const QJsonObject &o)
QJsonArray QJsonValue::toArray() const

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QJsonObject的使用示例 的相关文章

随机推荐

  • springboot 项目 docker 启动镜像 读不到application配置

    Dockerfile FROM openjdk 17 RUN cd RUN mkdir p config 删除旧jar包 RUN rm rf springboot3 jar 重新复制jar包 ARG JAR FILE ADD target
  • Maven问题:To see the full stack trace of the errors, re-run Maven with the -e switch.

    报错如下 ERROR gt Help 1 ERROR ERROR To see the full stack trace of the errors re run Maven with the e switch ERROR Re run M
  • C语言之详解静态变量static

    在C语言中static是用来修饰变量和函数的 这篇文章详细介绍了static主要作用 文章中有详细的代码实例 需要的朋友可以参考阅读 在C语言中 static是用来修饰变量和函数的 static主要作用为 1 修饰局部变量 静态局部变量 2
  • 在idea中快速构建方法的说明注释,带有参数信息

    在方法上面输入 然后按Ctrl enter即可 下面都是自动生成的内容 param request param response param handler return throws Exception Override public b
  • git命令超实用总结(23条超实用命令)

    本文总结了常见的23个git使用场景的处理方法 足够应对日常学习工作中对git的使用 文章目录 1 添加SSH验证免登陆 2 将本地项目上传GitHub 2 1 如果是新项目 本地还没有代码 2 2 如果想直接使用远程的代码 2 3 如果是
  • Android studio 3.5 debug 包不能安装

    debug模式下编译出的apk无法安装 可在根目录gradle properties中配置 android injected testOnly false
  • HTTP 隧道

    本文摘自书籍 HTTP 权威指南 此系列文章对应 github地址 隧道 可以通过 HTTP 应用程序访问使用非 HTTP 协议的应用程序 Web 隧道允许用户通过 HTTP 连接发送非 HTTP 流量 这样就可以在 HTTP 上捎带其他协
  • 2023牛客暑期多校训练营7 I We Love Strings

    https ac nowcoder com acm contest 57361 I 分治 容斥原理 include
  • [es6] 模板字符串内添加if判断

    我之前一只知道模板字符串中可以用三目运算符做判断 但今天有个需求要在模板字符串中添加if条件语句 于是百度了一下 在此记录一下 直接看代码吧 var html div class p 1 p p 2 p p 3 p p function i
  • Mybatis返回自增主键id的值,2种方式

    1 方式一 不建议使用 有BUG的方式 通过useGeneratedKeys true keyProperty id 来设置返回新的id值 这里有个问题就是 通过这种方式插入的值 经常会返回1 原因是因为他这里的意思是返回当前影响的行数 不
  • lc marathon 7.16

    文章目录 138 复制带随机指针的链表 https leetcode cn problems copy list with random pointer 剑指 Offer II 092 翻转字符 https leetcode cn prob
  • c++ 自定义时间格式

    1 自定义时间格式 我们可以使用strftime 函数将时间格式化为我们想要的格式 它的原型如下 size t strftime char strDest size t maxsize const char format const str
  • 关于HR系统升级为集团版的设计总结

    刚刚完了公司HR系统的升级 系统实现了从单一公司使用到多公司使用的转变 在升级的一个多月的时间内 虽然很苦 但感觉自已在系统架构上受益非浅 具体有以下感悟 一 MVC还是很重要 系统框架是五年前用delphi设计的 采用的基类加扩展类的模式
  • fluent p1模型_Fluent辐射传热模型理论以及相关设置(一)

    原标题 Fluent辐射传热模型理论以及相关设置 一 本文来源于网络 原作者 Libo CHen 感谢作者的辛苦整理和撰写 1概述 在传热的仿真中 有时候会不可避免的涉及到辐射传热 而我们对Fluent中辐射模型的了解甚少 很难得到可靠的计
  • 关于Unity-Web的Development build。

    Unity转手游之后是否该勾选development Build 首先看一看官方文档的解释 Development Build When you check the Development Build checkbox Unity gene
  • 【杂记】EMC、EMI、EMS、TVS、ESD概念学习总结

    注 杂记 系列为日常网搜资料的简单堆砌而积累成之 如有错误恭谢指出 标识为 原创 其实不完全是 只是多引用再整理 大都引自网络 侵删 EMC EMC Electromagnetic Compatibility 属于概念 为电磁兼容性 电磁兼
  • java 中unsigned类型的转换

    java 中unsigned类型的转换
  • oh-my-zsh安装与常用插件

    zsh 介绍 工欲善其事 必先利其器 zsh也是一种 shell 兼容最常用的 bash 这种 shell 的命令和操作 bash 虽然很标准 但是自己日常使用方便更重要 oh my zsh 提供了丰富的插件和提 安装 先使用命令查看系统支
  • whisper:robust speech recognition via large-sacle weak supervision

    OpenAI Whisper 精读 论文精读 45 哔哩哔哩 bilibili更多论文 https github com mli paper reading 视频播放量 68331 弹幕量 327 点赞数 2332 投硬币枚数 1192 收
  • QJsonObject的使用示例

    介绍 负责封装JSON对象 是键 值对列表 其中键是惟一的字符串 值由QJsonValue表示 1 QJsonObjec 封装了Json里的对象 接口与QMap相似 都具有size insert 和remove 等操作 还可以使用标准C 迭