【Qt】Qt中QJsonDocument 类
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 类相关推荐
- 【Qt】Qt中QJsonObject类
00. 目录 文章目录 00. 目录 01. QJsonObject类简介 02. 公有类型 03. 公有成员方法 04. 公有成员方法解析 05. 参考示例 06. 附录 01. QJsonObje ...
- 【Qt】Qt中QJsonValue类
00. 目录 文章目录 00. 目录 01. QJsonValue类介绍 02. QJsonValue成员方法 03. QJsonValue成员方法介绍 04. 附录 01. QJsonValue类介 ...
- PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解
本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习 ...
- Qt项目中,绘制只有两个圆角的矩形及QPainterPath类的应用
总第39篇 本文主要梳理总结了在Qt项目开发过程中,某些特殊场合绘制只有两个圆角矩形的方法,并在此基础上详细介绍了类QPainterPath的用法. 1.两个圆角矩形的绘制方法 在Qt项目中,绘制只有 ...
- Qt使用第三方串口类qextserialport无法打开串口的可能解决方案(文章中描述的可以解决)
我前面的博客提到了,在我的笔记本电脑中用QT的第三方串口类QextSerilPort打不开串口,今天终于解决了,下面简单分享一下: 先说下环境:我用的是QT4.8.0,每三方的串口类QextSeria ...
- Qt/PyQt中使用系统全局的快捷键
Qt/PyQt中使用系统全局的快捷键 除了全局快捷键部分外,其他的都比较简单,都是我实现"onekeycodehighlighter"中碰到的一些小问题,这里顺面整理一下.事实上, ...
- 在Qt Designer中使用自定义Widgets小部件
在Qt Designer中使用自定义Widgets 在Qt Designer中使用自定义Widgets 处理自定义Widgets小部件 推广Widgets小部件 用户定义的自定义小部件 在Qt Des ...
- Qt Quick 中 QML 与 C++ 混合编程详解
Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...
- C++ 11 在 Qt 5 中的应用
C++ 11 现在已经是 C++ 标准,也就没有理由不在新的应用中使用.Qt 4.8 是第一个支持 C++ 11 特性的 Qt 版本,不过这里,我们首先介绍的是,Qt 5 中如何结合使用 C++ 11 ...
最新文章
- 1.15 Java 9新增的不可变集合
- mysql 数据库编译安装_mysql 数据库 编译安装(千峰)
- formidable处理提交的表单或文件的简单介绍
- Windows 安装 Redis
- Gitlab CI-3.遇到的问题
- PHP大型Web应用入门(一)
- ansi c标准_C语言为什么需要有标准库
- Spring(三)Bean继续入门
- 玻色量子与Menlo Systems共同开展光量子计算研发
- 斗鱼注册服务器没有返回,斗鱼遭遇服务器大面积崩溃事故上热搜 大量主播直播间统统不见了...
- 一口气通过一系列阿里云证书ACA/ACP/ACE认证心得
- docker配置代理pull报错:proxyconnect tcp: tls: first record does not look like a TLS handshake
- MySQL两种存储引擎: MyISAM和InnoDB 简单总结
- 从PD充电器取9V/12V给产品供电快充,PD取电芯片概述
- 满足互动、发出用户民意的BBS论坛
- php验证码无法验证问题,php无法显示验证码
- S7200SMART 软件在虚拟机中连接PLC笔记
- jQuery-动画效果(王者荣耀手风琴案例)
- 服务器响应请求状态码(详细版)
- Android 图片压缩各种方式
热门文章
- Firefox, IE等不同浏览器对JavaScript,CSS不同解析问题 (转备以后使用)
- c51语言的设计步骤,第3章节单片机c51语言程序的设计基本.ppt
- 暴力除法C语言,暴力除法
- java创建一个程序把输入字符串的大小写互换_8 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转...
- 织梦dedecms search.php注入漏洞exp,DedeCms V57 plus/search.php 文件SQL注射0day漏洞
- Swift 协议protocol
- Cookie防伪造防修改
- C Primer Plus note1
- apache 的工作模式
- Android调试相关的技术常识