00. 目录

文章目录

  • 00. 目录
  • 01. QJsonDocument类简介
  • 02. 公有类型
  • 03. 公有成员方法
  • 04. 静态公有成员
  • 05. 复杂Json生成和解析
  • 06. 附录

01. QJsonDocument类简介

Header:  #include <QJsonDocument>
qmake:  QT += core
Since:  Qt 5.0

​ QJsonDocument提供了读写Json文档的方法。

​ QJsonDocument是一个包含了完整JSON文档的类,支持以UTF-8编码的文本和QT自身的二进制格式来读写JSON文档。

​ JSON文档可以使用QJsonDocument::fromJson()将基于JSON文档的文本形式转换为QJsonDocument对象,toJSON()可以将QJsonDocument转换回文本形式。

​ 解析文档的有效性可以使用 !isNull() 进行查询。

​ 使用isArray()和isObject()可以分别查询一个文档是否包含了一个数组或一个object。使用array()或object()可以将包含在文档中的数组或object提取出来。

​ 使用fromBinaryData()或fromRawData()也可以从一个二进制形式创建一个QJsonDocument对象。

02. 公有类型

enum DataValidation { Validate, BypassValidation }
enum JsonFormat { Indented, Compact }

03. 公有成员方法

QJsonDocument()
QJsonDocument(const QJsonObject &object)
QJsonDocument(const QJsonArray &array)
QJsonDocument(const QJsonDocument &other)
QJsonDocument(QJsonDocument &&other)
~QJsonDocument()
QJsonArray  array() const
bool    isArray() const
bool    isEmpty() const
bool    isNull() const
bool    isObject() const
QJsonObject object() const
const char *    rawData(int *size) const
void    setArray(const QJsonArray &array)
void    setObject(const QJsonObject &object)
void    swap(QJsonDocument &other)
QByteArray  toBinaryData() const
QByteArray  toJson() const
QByteArray  toJson(QJsonDocument::JsonFormat format) const
QVariant    toVariant() const
bool    operator!=(const QJsonDocument &other) const
QJsonDocument & operator=(const QJsonDocument &other)
QJsonDocument & operator=(QJsonDocument &&other)
bool    operator==(const QJsonDocument &other) const
const QJsonValue    operator[](const QString &key) const
const QJsonValue    operator[](QLatin1String key) const
const QJsonValue    operator[](int i) const

成员方法解析

[static] QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation = Validate)
Validation决定数据是否在使用前检查数据有效性。[static] QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)
将json解析为UTF-8的JSON文档[static] QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation = Validate)
使用data数据的前size字节创建一个QJsonDocument对象[static] QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
根据variant创建QJsonDocument对象bool QJsonDocument::isArray() constbool QJsonDocument::isEmpty() constbool QJsonDocument::isNull() constbool QJsonDocument::isObject() constQJsonObject QJsonDocument::object() const
返回文档中包含的QJsonObject对象const char *QJsonDocument::rawData(int *size) const
返回size大小的二进制数据void QJsonDocument::setArray(const QJsonArray &array)
设置array作为文档中的主对象void QJsonDocument::setObject(const QJsonObject &object)
设置object作为文档中的主对象QByteArray QJsonDocument::toBinaryData() const
返回文档的二进制格式数据QByteArray QJsonDocument::toJson(JsonFormat format = Indented) const
将QJsonDocument转换为UTF-8编码的format格式的JSON文档QVariant QJsonDocument::toVariant() const
返回JSON文档的QVariant格式

04. 静态公有成员

const uint   BinaryFormatTag
QJsonDocument   fromBinaryData(const QByteArray &data, QJsonDocument::DataValidation validation = Validate)
QJsonDocument   fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
QJsonDocument   fromRawData(const char *data, int size, QJsonDocument::DataValidation validation = Validate)
QJsonDocument   fromVariant(const QVariant &variant)

05. 复杂Json生成和解析

5.1 复杂Json

{"Company": "Digia","From": 1991,"Name": "Qt","Page": {"Developers": "https://www.qt.io/developers/","Download": "https://www.qt.io/download/","Home": "https://www.qt.io/"},"Version": [4.8,5.2,5.7]
}

5.2 复杂Json生成

// 构建 Json 数组 - Version
QJsonArray versionArray;
versionArray.append(4.8);
versionArray.append(5.2);
versionArray.append(5.7);// 构建 Json 对象 - Page
QJsonObject pageObject;
pageObject.insert("Home", "https://www.qt.io/");
pageObject.insert("Download", "https://www.qt.io/download/");
pageObject.insert("Developers", "https://www.qt.io/developers/");// 构建 Json 对象
QJsonObject json;
json.insert("Name", "Qt");
json.insert("Company", "Digia");
json.insert("From", 1991);
json.insert("Version", QJsonValue(versionArray));
json.insert("Page", QJsonValue(pageObject));// 构建 Json 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray);qDebug() << strJson;

5.3 复杂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")) {QJsonValue value = object.value("Name");if (value.isString()) {QString strName = value.toString();qDebug() << "Name : " << strName;}}if (object.contains("Company")) {QJsonValue value = object.value("Company");if (value.isString()) {QString strCompany = value.toString();qDebug() << "Company : " << strCompany;}}if (object.contains("From")) {QJsonValue value = object.value("From");if (value.isDouble()) {int nFrom = value.toVariant().toInt();qDebug() << "From : " << nFrom;}}if (object.contains("Version")) {QJsonValue value = object.value("Version");if (value.isArray()) {  // Version 的 value 是数组QJsonArray array = value.toArray();int nSize = array.size();for (int i = 0; i < nSize; ++i) {QJsonValue value = array.at(i);if (value.isDouble()) {double dVersion = value.toDouble();qDebug() << "Version : " << dVersion;}}}}if (object.contains("Page")) {QJsonValue value = object.value("Page");if (value.isObject()) {  // Page 的 value 是对象QJsonObject obj = value.toObject();if (obj.contains("Home")) {QJsonValue value = obj.value("Home");if (value.isString()) {QString strHome = value.toString();qDebug() << "Home : " << strHome;}}if (obj.contains("Download")) {QJsonValue value = obj.value("Download");if (value.isString()) {QString strDownload = value.toString();qDebug() << "Download : " << strDownload;}}if (obj.contains("Developers")) {QJsonValue value = obj.value("Developers");if (value.isString()) {QString strDevelopers = value.toString();qDebug() << "Developers : " << strDevelopers;}}}}}
}

06. 附录

官方参考文档

【Qt】Qt中QJsonDocument 类相关推荐

  1. 【Qt】Qt中QJsonObject类

    00. 目录 文章目录 00. 目录 01. QJsonObject类简介 02. 公有类型 03. 公有成员方法 04. 公有成员方法解析 05. 参考示例 06. 附录 01. QJsonObje ...

  2. 【Qt】Qt中QJsonValue类

    00. 目录 文章目录 00. 目录 01. QJsonValue类介绍 02. QJsonValue成员方法 03. QJsonValue成员方法介绍 04. 附录 01. QJsonValue类介 ...

  3. PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解

    本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习 ...

  4. Qt项目中,绘制只有两个圆角的矩形及QPainterPath类的应用

    总第39篇 本文主要梳理总结了在Qt项目开发过程中,某些特殊场合绘制只有两个圆角矩形的方法,并在此基础上详细介绍了类QPainterPath的用法. 1.两个圆角矩形的绘制方法 在Qt项目中,绘制只有 ...

  5. Qt使用第三方串口类qextserialport无法打开串口的可能解决方案(文章中描述的可以解决)

    我前面的博客提到了,在我的笔记本电脑中用QT的第三方串口类QextSerilPort打不开串口,今天终于解决了,下面简单分享一下: 先说下环境:我用的是QT4.8.0,每三方的串口类QextSeria ...

  6. Qt/PyQt中使用系统全局的快捷键

    Qt/PyQt中使用系统全局的快捷键 除了全局快捷键部分外,其他的都比较简单,都是我实现"onekeycodehighlighter"中碰到的一些小问题,这里顺面整理一下.事实上, ...

  7. 在Qt Designer中使用自定义Widgets小部件

    在Qt Designer中使用自定义Widgets 在Qt Designer中使用自定义Widgets 处理自定义Widgets小部件 推广Widgets小部件 用户定义的自定义小部件 在Qt Des ...

  8. Qt Quick 中 QML 与 C++ 混合编程详解

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...

  9. C++ 11 在 Qt 5 中的应用

    C++ 11 现在已经是 C++ 标准,也就没有理由不在新的应用中使用.Qt 4.8 是第一个支持 C++ 11 特性的 Qt 版本,不过这里,我们首先介绍的是,Qt 5 中如何结合使用 C++ 11 ...

最新文章

  1. 1.15 Java 9新增的不可变集合
  2. mysql 数据库编译安装_mysql 数据库 编译安装(千峰)
  3. formidable处理提交的表单或文件的简单介绍
  4. Windows 安装 Redis
  5. Gitlab CI-3.遇到的问题
  6. PHP大型Web应用入门(一)
  7. ansi c标准_C语言为什么需要有标准库
  8. Spring(三)Bean继续入门
  9. 玻色量子与Menlo Systems共同开展光量子计算研发
  10. 斗鱼注册服务器没有返回,斗鱼遭遇服务器大面积崩溃事故上热搜 大量主播直播间统统不见了...
  11. 一口气通过一系列阿里云证书ACA/ACP/ACE认证心得
  12. docker配置代理pull报错:proxyconnect tcp: tls: first record does not look like a TLS handshake
  13. MySQL两种存储引擎: MyISAM和InnoDB 简单总结
  14. 从PD充电器取9V/12V给产品供电快充,PD取电芯片概述
  15. 满足互动、发出用户民意的BBS论坛
  16. php验证码无法验证问题,php无法显示验证码
  17. S7200SMART 软件在虚拟机中连接PLC笔记
  18. jQuery-动画效果(王者荣耀手风琴案例)
  19. 服务器响应请求状态码(详细版)
  20. Android 图片压缩各种方式

热门文章

  1. Firefox, IE等不同浏览器对JavaScript,CSS不同解析问题 (转备以后使用)
  2. c51语言的设计步骤,第3章节单片机c51语言程序的设计基本.ppt
  3. 暴力除法C语言,暴力除法
  4. java创建一个程序把输入字符串的大小写互换_8 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转...
  5. 织梦dedecms search.php注入漏洞exp,DedeCms V57 plus/search.php 文件SQL注射0day漏洞
  6. Swift 协议protocol
  7. Cookie防伪造防修改
  8. C Primer Plus note1
  9. apache 的工作模式
  10. Android调试相关的技术常识