一、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 版权协议,转载请附上原文出处链接和本声明。