主要任务:经过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映射,把那些文件中的键缩短一个能够区分的标识,这样读写减小读取时间,可是这样会带来一个问题提供的标识每每不能彻底区分文件中全部的键。