主要任務:通過Qt5完成對Json格式的文件的讀寫操作。
①首先讀取json文件進行解析 ②對讀取出來的東西判斷是QJsonObject還是QJsonArray類型③對相應的類型根據提供的key去查找或者修改相對應的值
主要技術:
(1) Qt中常見的讀寫文件代碼
讀文件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();//讀取一行//如果讀取多行
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映射,把那些文件中的鍵縮短一個可以區分的標識,這樣讀寫減少讀取時間,但是這樣會帶來一個問題提供的標識往往不能完全區分文件中所有的鍵。