QT读写json文件

  • Post author:
  • Post category:其他




一、QT写入Json文件

  • 需要的头文件
#include <QJsonObject>
#include <QJsonDocument>
#include <QByteArray>
#include <QFile>
#include <QJsonArray>

json 文件里基本有三类:数组、键值对、对象。其中对象内部为一系列的键值对,数组内部比较宽泛,可以是对象,字符串,数字等。具体可参考

json文件格式详解

  • 分别写入对象,数组,或者键值对。首先json文件本身就是一个大的对象,所以在C++中Jsoncpp的使用第一步就是先建立一个一般命名为root的对象,然后把所有自己的内容写入到该root对象(object)中。不过在qt中虽然也需要首先新建一个总object,但是不需要命名。上代码
QJsonObject obj;
QJsonArray arrary;
QJsonObject sub;
int id=01;
QString name="zhangsan";
QString gender="Male";
sub.insert("id",QJsonValue(id));
sub.insert("name",QJsonValue(name));
sub.insert("gender",QJsonValue(gender));
array.append(QJsonValue(sub));
obj.insert("Student",QJsonValue(array));

//写入到文件,名字为info.json
QJsonDocument doc(obj);
QByteArray data=doc.toJson();
QFile file("info.json");
bool ok=file.open(QIODevice::WriteOnly)
if(ok)
{
	file.write(data);
	file.close();
}
else
{
  	qDebug()<<"write error!"<<endl;
}

效果

{
	"Student":
	[
		{
			"id":01,
			"gender":Male,
			"name":zhangsan
		}
	]
}



二、读取Json文件

  • 假设读取上述生成的Json文件。
//读入所有内容
QFile file("C:\info.json");
file.open(QIODevice::ReadOnly);
QByteArray data=file.readAll();
file.close();

//解析
QJsonParseError parseError;
QJsonDocument doc=QJsonDocument::fromJson(data.toUtf8,&parseError);
if(parseError.error==QJsonParseError::NoError){
	qDebug()<<"配置错误"return;
}
QJsonObject obj=doc.object();
if(obj.contains("Student"))
{
	QJsonValue arrayTemp=obj.value("Student");
	QJsonArray array=arrayTemp.toArray();
	QJsonValue sub=array.at(0);//因为里面就一个元素,如果有多个元素,可以通过array.size()遍历
	QJsonObject subObj=sub.toObject();
	//--------------
	QJsonValue idTemp=subObj.value("id");
	int id=idTemp.toInt();
	QJsonValue nameTemp=subObj.value("name");
	QString name=nameTemp.toString();
	QJsonValue genderTemp=subObj.value("gender");
	QString gender=genderTemp.toString();	
}
}

每读取一个文件时,都需要先用

QJsonValue

获取,然后将获得的值转为其应该的类型。



版权声明:本文为GENGXINGGUANG原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。