1.读取JSON文件
首先将数据保存为JSON文件或者二进制文件需要QJsonObject 、QJsonDocument等, QJsonParseError 用来查看错误信息。 以下代码实现了读取JSON文件,还是需要逐层解,通过迭代器遍历值。
QFile loadFile(FilePath);
if (!loadFile.exists())
QMessageBox::information(0, "information", 0);
if (!loadFile.open(QIODevice::ReadOnly | QIODevice::Text))
QMessageBox::information(0, "information", QString::fromLocal8Bit("加载文件失败"));
QByteArray array = loadFile.readAll();
loadFile.close();
QJsonParseError jsonParseError;
QJsonDocument jsonDocument(QJsonDocument::fromJson(array, &jsonParseError));
if (QJsonParseError::NoError != jsonParseError.error)
{
qDebug() << QString("JsonParseError: %1").arg(jsonParseError.errorString());
return;
}
QJsonObject rootObject = jsonDocument.object();
QJsonObject::const_iterator itchild = rootObject.constBegin();
QJsonObject::const_iterator endchild = rootObject.constEnd();
while (itchild != endchild)
{
QJsonObject child = itchild.value().toObject();
QJsonObject::const_iterator itchild1 = child.constBegin();
QJsonObject::const_iterator endchild1 = child.constEnd();
while (itchild1 != endchild1)
{
controlOne.insert(make_pair(Serial.toInt(), toolName))
}
}
control.insert(QString::fromStdString(itchild.key().toStdString()), controlOne);
2.保存JSON文件
QFile file(str);
if (!file.open(QIODevice::WriteOnly)) {
qDebug() << "File open error";
}
else {
qDebug() << "File open!";
}
QJsonObject jsonObject;
QMap <QString, QToolBase*>::iterator iterator_2 = FlowTabMap.begin();
while (iterator_2 != FlowTabMap.end()) {
}
QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);
file.write(jsonDoc.toJson());
file.close();
exit(0);
注意保存文件的话目前官方推荐一共有两种一种是toJSON(本地文件可以看到详细的json),一种为二进制文件,需要保存为为Cbor格式。5.15版本以下提供了一种老式兼容的方法, FromBinaryData() 或 fromRawData(),toBinaryData() 或 toRawData()
加载时
QJsonDocument jsonDocument(QJsonDocument::fromJson(array, &jsonParseError));
QJsonDocument jsonDocument(QJsonDocument(QCborValue::fromCbor(array).toMap().toJsonObject()));
jdoc2 = QJsonDocument::fromBinaryData(ba);
保存时
file.write(jsonDoc.toJson());
file.write(QCborValue::fromJsonValue(jsonObject).toCbor());
关于QCborValue这个类,根据官方解释为json的超集。 https://doc.qt.io/qt-5/qcborvalue.html
官方JSON保存例子的链接
https:
|