主要任務:經過Qt5完成對Json格式的文件的讀寫操做。json
①首先讀取json文件進行解析 ②對讀取出來的東西判斷是QJsonObject仍是QJsonArray類型③對相應的類型根據提供的key去查找或者修改相對應的值數組
主要技術:優化
(1) Qt中常見的讀寫文件代碼this
讀文件QString fileName = "D:\Lib\1.txt";QString str;QFile file(fileName); 編碼
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) 對象
{ 內存
QMessageBox::warning(this,"Warnning","can't open",QMessageBox::Yes);文檔
} 字符串
QTextStream in(&file);str=in.readLine();//讀取一行//若是讀取多行 get
QString str2[MAX];
for(int 1=0 ;i<MAX; i++)
str2[i]=in.readLine();
file.close();
寫文件QStringfileName=「D:/Lib/1.txt");
QStringstr="CSDN";
QFile file(fileName);
if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
{
QMessageBox::warning(this,"sdf","can'topen",QMessageBox::Yes);
}
QTextStream in(&file);
in<<str<<"\n";//若是寫多行,同上循環便可
file.close
(2) 在Qt讀寫json中主要用到這幾個類QJsonDocument、QJsonObject、QJsonArray
QJsonDocument:能夠從一個基於文本表示的UTF-8編碼,又能夠從Qt本身的二進制格式讀取和寫入這個文件。QJsonDocument有效解析後的文檔可使用!iSNull()判斷。使用isArray()和isObject()來判斷是否包含一個數組或對象。文檔中包含的數組或對象可使用array()或object()進行檢索,而後讀取或操縱。
QJsonObject:用於封裝JSON對象
JSON對象是鍵值對,其中鍵是惟一的字符串,其值由QJsonValue表明。一個QJsonObject能夠從QVariantMap轉換/被轉換
QJsonArray: 用於封裝JSON數組
一個JSON數組列表值。該列表能夠經過從陣列插入和移除QJsonValue的操縱。一個QJsonArray能夠從QVariantList轉換爲/被轉換
代碼優化:爲了防止json文件過大,讀取數據時,特別是鍵很長的時候須要花不少時間和內存,此時的解決方案最好經過設置一箇中間層,這個中間層主要是經過一個map映射,把那些文件中的鍵縮短一個能夠區分的標識,這樣讀寫減小讀取時間,可是這樣會帶來一個問題提供的標識每每不能徹底區分文件中全部的鍵。