- QJsonDocument: 提供一種讀取和寫入JSON檔案的方法,可以通過它的的成員函式array()或object()檢索檔案中包含的陣列或物件,然后讀取JSON資料,或者修改資料,
- QJsonObject: 封裝了一個JSON物件, 可以使用它的成員函式size()、insert()和remove()來對修改JSON資料.
- QJsonArray: 封裝了一個JSON陣列,用來實作JSON陣列的
1.決議JSON-示例
注意:JSON中的Key命名不能相同,否則的話會覆寫掉,比如:
{ "FLAG": 1, "FLAG": "example"}
最終只能讀取到FLAG的"example"值.
json檔案示例內容如下:
{ "FLAG": 1, "NAME": "example", "ARRAYS": [ { "Name": "array1", "String": "哈哈噠1" }, { "Name": "array2", "String": "哈哈噠2" }, { "Name": "array3", "String": "哈哈噠3" }, { "Name": "array4", "String": "哈哈噠4" } ]}
程式如下:
bool parseJson(){ //打開檔案 QFile file(QApplication::applicationDirPath()+"/1.json"); if(!file.open(QIODevice::ReadOnly)) { qDebug() << "File open failed!"; } else { qDebug() <<"File open successfully!"; } QJsonParseError *error=new QJsonParseError; QJsonDocument jdc=QJsonDocument::fromJson(file.readAll(),error); //判斷檔案是否完整 if(error->error!=QJsonParseError::NoError) { qDebug()<<"parseJson:"<<error->errorString(); return false; } QJsonObject obj = jdc.object(); //獲取物件 qDebug() <<"object size:"<<obj.size(); QStringList list = obj.keys(); foreach (QString key, list) { if(obj[key].isString()) { qDebug()<<"key:"<<key<<"value:"<<obj[key].toString(); } else if(obj[key].isArray() && key =="ARRAYS") { QJsonArray arr = obj[key].toArray(); for(int i=0;i<arr.count();i++) { QJsonObject arrObj= arr[i].toObject(); qDebug()<<"key:\"Name\""<<"value:"<<arrObj["Name"].toString(); qDebug()<<"key:\"String\""<<"value:"<<arrObj["String"].toString(); } } } return true;}
列印如下:

寫JSON-示例
代碼如下:
bool writeJson(){ //打開檔案 QFile file(QApplication::applicationDirPath()+"/1.json"); if(!file.open(QIODevice::WriteOnly)) { qDebug() << "File open failed!"; } else { qDebug() <<"File open successfully!"; } QJsonDocument jdoc; QJsonObject obj; QJsonArray arr; for(int i=1;i<5;i++) { QJsonObject Member; //定義陣列成員 Member["Name"] = QString("array%1").arg(i); Member["String"] = QString("哈哈噠%1").arg(i); arr.append(Member); } obj["ARRAYS"] = arr; obj["NAME"] ="example"; obj["FLAG"] ="1"; jdoc.setObject(obj); file.write(jdoc.toJson(QJsonDocument::Indented)); //Indented:表示自動添加/n回車符 file.close();}
檔案保存如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84896.html
標籤:C++
上一篇:哈爾濱網路熱身賽
下一篇:Linux低延遲服務器系統調優
