Qt保存JSON类型的文件或者json二进制文件

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;   //主要是把数据全部放到jsonObject中
	QMap <QString, QToolBase*>::iterator iterator_2 = FlowTabMap.begin();
	
	while (iterator_2 != FlowTabMap.end()) {
	//放值过程不在写
	}
	QJsonDocument jsonDoc;
	jsonDoc.setObject(jsonObject);
	// 将json以文本形式写入文件并关闭文件。
	file.write(jsonDoc.toJson());
	file.close();
	exit(0);

注意保存文件的话目前官方推荐一共有两种一种是toJSON(本地文件可以看到详细的json),一种为二进制文件,需要保存为为Cbor格式。5.15版本以下提供了一种老式兼容的方法, FromBinaryData() 或 fromRawData(),toBinaryData() 或 toRawData()

Qt保存JSON类型的文件或者json二进制文件_第1张图片

加载时
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://doc.qt.io/qt-5/qtcore-serialization-savegame-example.html

你可能感兴趣的:(Qt,json,qt,开发语言)