原文:http://beself.top/2020/02/23/qt-read-wirte-json/
Qt自带类可以对json文件进行操作:QJsonDocument,QJosnObject, QJsonArray,QJsonValue,QJsonParseError
不做过多的解释和注释,直接拿代码去实验
组装json串并写文件
QJsonObject dObj;
for(const auto &d : qAsConst(List)) {
QJsonObject newObj;
newObj.insert("Name", d.Name);
newObj.insert("Passwd", d.Passwd);
QJsonArray array = dObj["Info"].toArray();
array.append(newObj);
dObj.remove("Info");
dObj.insert("Info", array);
}
dObj.insert("Rember", Rember);
QFile file("JTest.json");
if(!file.open(QIODevice::WriteOnly)) {
qDebug() << "can not open file.";
return;
}
QJsonDocument doc;
doc.setObject(dObj);
QByteArray ba = doc.toJson(QJsonDocument::Compact);
QDataStream out(&file);
out << ba;
file.close();
读取并解析json文件
QFile file("JTest.json");
if(!file.open(QIODevice::ReadOnly)) {
qDebug() << "can not open file.";
return;
}
QDataStream in(&file);
QByteArray ba;
in >> ba;
file.close();
QJsonParseError Err;
QJsonDocument doc = QJsonDocument::fromJson(ba, &Err);
if(QJsonParseError::NoError == Err.error) {
if(doc.isObject()) {
QJsonObject dObj = doc.object();
if(dObj.contains("Info")) {
QJsonArray array = dObj["Info"].toArray();
for(const auto &d : qAsConst(array)) {
QJsonObject obj = d.toObject();
AccList.push_back(AccPwd(obj["Name"].toString(), obj["Passwd"].toString()));
}
}
if(dObj.contains("Rember")) {
CheckRembPwd = dObj["Rember"].toInt();
}
}
}
Rember = CheckRembPwd;