1.读取文件内容到二进制流
1.1 使用QFile打开文件
QFile file(filepathname);
file.open(QIODevice::ReadOnly | QIODevice::Text);
1.2 使用QByteArray保存文件内容
QByteArray jsonData = file.readAll();
1.3 可以关闭文件了
file.close();
2.检查读取的这个文件是否符合json规范
2.1 使用QJsonDocument类对内容进行一次转换:QByteArray —》 QJsonDocument,将转换中可能出现的异常抛给QJsonParseError;
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonData, &parseError);
if (parseError.error != QJsonParseError::NoError) {
qDebug() << "转换过程出现错误:" << parseError.errorString();
return false;
}
3.通过QJsonObject类、QJsonValue类、QJsonArray类,从“doc”中取获取我们想要的内容;
QJsonObject obj = doc.object();
这个obj对应在.json文件中的内容就是“{}”下的内容
比如
{
"a":"1",
"b":["1","2"],
"c":{
"c1":"1",
"c2":"2"
}
}
可以通过遍历,得到其中的键值对(如"a":“1”);
for (auto it = obj.begin(); it != obj.end(); ++it) {
qDebug()<<it;
qDebug()<<it.key();
qDebug()<<it.value();
}
但当值value是{}或者[]时,就还需要继续解析;
{}还是继续转成QJsonObject
QJsonObject obj_2 = obj.value("c").toObject();
//obj.value("c")等价于obj["c"]
[]需要转换为QJsonArray;
QJsonArray array = doc.value("b").toArray();
array中就是单独的一个个值了,对array进行遍历
for(const QJsonValue &value | array){
qDebug()<<value;
}