柚子快報(bào)激活碼778899分享:c++ qt Json文件操作
柚子快報(bào)激活碼778899分享:c++ qt Json文件操作
JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于前端與后端之間的數(shù)據(jù)傳輸。它以簡(jiǎn)潔、易讀的文本格式來(lái)表示結(jié)構(gòu)化數(shù)據(jù),通常由鍵值對(duì)(key-value pairs)組成,支持?jǐn)?shù)組(array)和嵌套對(duì)象(nested objects)。JSON具有廣泛的應(yīng)用,特別在Web開發(fā)中被廣泛使用。
JSON的語(yǔ)法規(guī)則簡(jiǎn)單明了,常見的數(shù)據(jù)類型包括字符串、數(shù)字、布爾值、null、數(shù)組和對(duì)象。它可以表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并且易于解析和生成。JSON數(shù)據(jù)可以通過(guò)JavaScript的內(nèi)置方法進(jìn)行解析和處理,也可以在不同編程語(yǔ)言之間進(jìn)行轉(zhuǎn)換和傳遞。
JSON使用場(chǎng)景:配置文件、序列化、定義接口
JSON是存儲(chǔ)和交換文本信息的語(yǔ)法,類似XML,它比XML更小、更快、更加容易解析
QJsonDocument類
QJsonDocument 是 Qt 框架中用于處理 JSON(JavaScript Object Notation)數(shù)據(jù)的類。它提供了一種方便的方式來(lái)創(chuàng)建、解析和操作 JSON 數(shù)據(jù)。
QJsonDocument是一個(gè)包含了完整JSON文檔的類,支持以UTF-8編碼的文本和QT自身的二進(jìn)制格式來(lái)讀寫JSON文檔。
創(chuàng)建 JSON 對(duì)象:使用 QJsonObject 類創(chuàng)建一個(gè) JSON 對(duì)象,并將其添加到 QJsonDocument 中。 解析 JSON 字符串:通過(guò)調(diào)用 QJsonDocument::fromJson() 靜態(tài)函數(shù)并傳入 JSON 字符串,可以將其解析為 QJsonDocument 對(duì)象 將 JSON 對(duì)象轉(zhuǎn)換為字符串:通過(guò)調(diào)用 QJsonDocument::toJson() 函數(shù),可以將 QJsonDocument 對(duì)象轉(zhuǎn)換為 JSON 字符串。 訪問(wèn)和修改 JSON 對(duì)象的值:通過(guò)訪問(wèn) QJsonDocument 和 QJsonObject 的成員函數(shù),可以讀取和修改 JSON 對(duì)象中的鍵值對(duì)。 支持多種數(shù)據(jù)類型:QJsonDocument 可以處理各種類型的數(shù)據(jù),包括字符串、整數(shù)、浮點(diǎn)數(shù)、布爾值、數(shù)組和嵌套對(duì)象等。
常用函數(shù)
QJsonDocument::fromJson(); //將 JSON 字符串解析為 QJsonDocument 對(duì)象。
QJsonDocument::fromVarient(); //將Varient類型解析為 QJsonDocument 對(duì)象
QJsonDocument::toJson(); //將 QJsonDocument 對(duì)象轉(zhuǎn)換為 JSON 字符串。
QJsonDocument::object(); //獲取表示 JSON 文檔的頂層對(duì)象的 QJsonObject 對(duì)象
QJsonDocument::isArray(); //檢查 QJsonDocument 是否表示一個(gè) JSON 數(shù)組。
QJsonDocument::array(); //獲取 QJsonDocument 中的 JSON 數(shù)組。
QJsonDocument::isEmpty(); //檢查 QJsonDocument 是否為空。
QJsonDocument::isNull(); //檢查 QJsonDocument 是否為 null。
QJsonObject
QJsonObject 是 Qt 中用于表示 JSON 對(duì)象的類。它提供了一組函數(shù)來(lái)操作和訪問(wèn) JSON 對(duì)象的鍵值對(duì)。
常用函數(shù)
QJsonObject::insert(); //向 JSON 對(duì)象中插入一個(gè)鍵值對(duì)。
QJsonObject::contains(); //檢查 JSON 對(duì)象中是否包含指定的鍵。
QJsonObject::value(); //獲取指定鍵的值。
QJsonObject::keys(); //返回 JSON 對(duì)象中所有鍵的列表。
QJsonObject::remove(); //從 JSON 對(duì)象中刪除指定的鍵及其對(duì)應(yīng)的值。
QJsonObject::isEmpty(); //檢查 JSON 對(duì)象是否為空。
QJsonValue
QJsonValue 是 Qt 中用于表示 JSON 值的類。它是一個(gè)通用的數(shù)據(jù)類型,可以表示 JSON 中的各種數(shù)據(jù)類型,包括字符串、數(shù)字、布爾值、數(shù)組、對(duì)象和 null 值。
常用函數(shù)
類型檢測(cè)函數(shù):
bool isNull() const:檢查值是否為 null。bool isBool() const:檢查值是否為布爾類型。bool isDouble() const:檢查值是否為雙精度浮點(diǎn)數(shù)。bool isString() const:檢查值是否為字符串。bool isArray() const:檢查值是否為數(shù)組。bool isObject() const:檢查值是否為對(duì)象。
獲取值函數(shù):
double toDouble(bool *ok = nullptr) const:將值轉(zhuǎn)換為雙精度浮點(diǎn)數(shù)。QString toString() const:將值轉(zhuǎn)換為字符串。bool toBool() const:將值轉(zhuǎn)換為布爾值。int toInt() const:將值轉(zhuǎn)換為整數(shù)。QJsonArray toArray() const:將值轉(zhuǎn)換為數(shù)組。QJsonObject toObject() const:將值轉(zhuǎn)換為對(duì)象。
其他常用函數(shù):
bool operator==(const QJsonValue &other) const:比較兩個(gè) QJsonValue 對(duì)象是否相等。QJsonValue operator[](int i) const:訪問(wèn)數(shù)組中的元素。QJsonValue operator[](const QString &key) const:訪問(wèn)對(duì)象中指定鍵對(duì)應(yīng)的值。
數(shù)據(jù)寫入JSON文件
#include
#include
#include
#include
//將數(shù)據(jù)信息寫入JSON文件
void QJsonOpen::writeJson()
{
//1.創(chuàng)建JSON對(duì)象
QJsonObject mysqlinfo;
mysqlinfo.insert("ip","192.168.0.125");
mysqlinfo.insert("port",3308);
mysqlinfo.insert("user","root");
mysqlinfo.insert("password","123456");
QJsonObject jsoninfo;
jsoninfo.insert("code",1);
jsoninfo.insert("dbmsg","MYSQL數(shù)據(jù)庫(kù)配置參數(shù)");
jsoninfo.insert("data",mysqlinfo);//將json對(duì)象作為Json對(duì)象插入的數(shù)據(jù)值
//2.創(chuàng)建Json文檔
QJsonDocument jsondoc;
jsondoc.setObject(jsoninfo);
//3.創(chuàng)建文件
QFile qfile("./databasejsonfiles.json");
if(qfile.open(QIODevice::writeOnly))
{
qfile.write(jsondoc.toJson());
qfile.close();
}
//http發(fā)送json數(shù)據(jù)
QByteArray data = jsondoc.toJson();
qDebug() << "url:" << url << ",data:" << QString(data);
QNetworkReply *reply = m_manager->post(request, data);
}
//從QVarient讀取數(shù)據(jù)
QMap
json.insert("login", login);
json.insert("web_server", web_server);
QJsonDocument jsonDocument = QJsonDocument::fromVariant(json);
if (jsonDocument.isNull() == true) {
qDebug() << "QJsonDocument::fromVariant錯(cuò)誤";
return;
}
從json文件讀出數(shù)據(jù)
QString strjson;
QFile qfiles("./databasejsonfiles.json");
if(qfiles.open(QIODevice::ReadOnly))
{
strjson = qfiles.readAll();
qfiles.close();
}
QJsonParseError jsonerror;//返回JSON解析錯(cuò)誤的時(shí)候,報(bào)告錯(cuò)誤信息
QJsonDocument jsondoc = QJsonDocument::fromJson(strjson.toUtf8(),&jsonerror);
QString strtemp;
if(!jsondoc.isEmpty() && (jsonerror.error == QJsonParseError::NoError))
{
//只要jsondoc不為空,和jsonerror沒(méi)有錯(cuò)誤
//將他轉(zhuǎn)換為JSON對(duì)象
QJsonObject json = jsondoc.object();
QJsonValue code = json.value("code");
QJsonValue data = json.value("data");
//檢查數(shù)據(jù)
if(code.isUndefined() || code.toDouble() != 1 || data.isUndefined() || !data.isObject())
{
qDebug()<<"轉(zhuǎn)換JSon數(shù)據(jù)錯(cuò)誤,請(qǐng)重新檢查!";
exit(100);
}
//如果沒(méi)有錯(cuò)誤,讀取data數(shù)據(jù)信息
QJsonObject databaseinfo = data.toObject();
QJsonObject dbip = databaseinfo.value("ip");
QJsonObject dbport = databaseinfo.value("port");
}
//遍歷json文檔的鍵并查找匹配的鍵值對(duì)
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(json, &err);
if (err.error == QJsonParseError::NoError) {
//沒(méi)有出錯(cuò)
if (doc.isNull() || doc.isEmpty()) {
qDebug() << "doc is null or doc is empty";
return "";
}
if (doc.isObject()) {
QJsonObject rootObj = doc.object();
QJsonValue titleValue = rootObj.value(title);
if (titleValue.type() == QJsonValue::Object) {
QJsonObject titleObj = titleValue.toObject();
QStringList list = titleObj.keys();
for (int i=0;i QString keyTemp = list.at(i); if (keyTemp == key) { return titleObj.value(key).toString(); } } } } } else { qDebug() << "err = " << err.errorString(); } 柚子快報(bào)激活碼778899分享:c++ qt Json文件操作 相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。