日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Qt】Qt中QJsonDocument 类

發(fā)布時(shí)間:2024/4/24 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】Qt中QJsonDocument 类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. QJsonDocument類簡(jiǎn)介
    • 02. 公有類型
    • 03. 公有成員方法
    • 04. 靜態(tài)公有成員
    • 05. 復(fù)雜Json生成和解析
    • 06. 附錄

01. QJsonDocument類簡(jiǎn)介

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

? QJsonDocument提供了讀寫(xiě)Json文檔的方法。

? QJsonDocument是一個(gè)包含了完整JSON文檔的類,支持以UTF-8編碼的文本和QT自身的二進(jìn)制格式來(lái)讀寫(xiě)JSON文檔。

? JSON文檔可以使用QJsonDocument::fromJson()將基于JSON文檔的文本形式轉(zhuǎn)換為QJsonDocument對(duì)象,toJSON()可以將QJsonDocument轉(zhuǎn)換回文本形式。

? 解析文檔的有效性可以使用 !isNull() 進(jìn)行查詢。

? 使用isArray()和isObject()可以分別查詢一個(gè)文檔是否包含了一個(gè)數(shù)組或一個(gè)object。使用array()或object()可以將包含在文檔中的數(shù)組或object提取出來(lái)。

? 使用fromBinaryData()或fromRawData()也可以從一個(gè)二進(jìn)制形式創(chuàng)建一個(gè)QJsonDocument對(duì)象。

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決定數(shù)據(jù)是否在使用前檢查數(shù)據(jù)有效性。[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數(shù)據(jù)的前size字節(jié)創(chuàng)建一個(gè)QJsonDocument對(duì)象[static] QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) 根據(jù)variant創(chuàng)建QJsonDocument對(duì)象bool QJsonDocument::isArray() constbool QJsonDocument::isEmpty() constbool QJsonDocument::isNull() constbool QJsonDocument::isObject() constQJsonObject QJsonDocument::object() const 返回文檔中包含的QJsonObject對(duì)象const char *QJsonDocument::rawData(int *size) const 返回size大小的二進(jìn)制數(shù)據(jù)void QJsonDocument::setArray(const QJsonArray &array) 設(shè)置array作為文檔中的主對(duì)象void QJsonDocument::setObject(const QJsonObject &object) 設(shè)置object作為文檔中的主對(duì)象QByteArray QJsonDocument::toBinaryData() const 返回文檔的二進(jìn)制格式數(shù)據(jù)QByteArray QJsonDocument::toJson(JsonFormat format = Indented) const 將QJsonDocument轉(zhuǎn)換為UTF-8編碼的format格式的JSON文檔QVariant QJsonDocument::toVariant() const 返回JSON文檔的QVariant格式

04. 靜態(tài)公有成員

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. 復(fù)雜Json生成和解析

5.1 復(fù)雜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 復(fù)雜Json生成

// 構(gòu)建 Json 數(shù)組 - Version QJsonArray versionArray; versionArray.append(4.8); versionArray.append(5.2); versionArray.append(5.7);// 構(gòu)建 Json 對(duì)象 - 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/");// 構(gòu)建 Json 對(duì)象 QJsonObject json; json.insert("Name", "Qt"); json.insert("Company", "Digia"); json.insert("From", 1991); json.insert("Version", QJsonValue(versionArray)); json.insert("Page", QJsonValue(pageObject));// 構(gòu)建 Json 文檔 QJsonDocument document; document.setObject(json); QByteArray byteArray = document.toJson(QJsonDocument::Compact); QString strJson(byteArray);qDebug() << strJson;

5.3 復(fù)雜Json解析

QJsonParseError jsonError; // 轉(zhuǎn)化為 JSON 文檔 QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) { // 解析未發(fā)生錯(cuò)誤if (doucment.isObject()) { // JSON 文檔為對(duì)象QJsonObject object = doucment.object(); // 轉(zhuǎn)化為對(duì)象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 是數(shù)組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 是對(duì)象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. 附錄

官方參考文檔

總結(jié)

以上是生活随笔為你收集整理的【Qt】Qt中QJsonDocument 类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。