1.QT-JSON类的简单说明?
2.写入一个json文件?
3.读取一个json文件?
一、QT-JSON类的简单说明?
1,JSON是一种数据交换格式,在互联网广泛使用,有六种基本数据类型,分别是:bool
, double
, string
, array
, object
, null
。
2,Qt提供了对处理JSON数据的支持,封装了几个类,分别是:QJsonDocument, QJsonObject, QJsonArray, QJsonValue, QJsonParseError, QJsonObject::const_iterator, QJsonObject::iterator。
3,QJsonDocument
:读取json文件或者生成json文件。读取json文件通过QJsonDocument::fromJson()将json文件转为QJsonDocument。生成json文件通过toJson()将QJsonDocument转为json文本。
4,QJsonObject
:json中一个大括号括起来的内容,就能看做是一个jsonObject对象
5,QJsonArray
:json中一个中括号括起来的内容,就能看做是一个jsonArray对象,中括号里面可能只有基本数据类型,也可能是jsonObject对象
6,QJsonValue
:json中一个冒号右侧的值就是一个jsonValue对象,这个value可能是一个基本数据类型,也可能是一个jsonObject或jsonArray对象
7,QJsonParseError
:用于报告JSON解析期间的错误,我们常在读取json文件时,调用errorString()方法输出报错信息。
二、写入一个json文件?
{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"Phone numbers": [
"+44 1234567",
"+44 2345678"
]
}
最外面通过大括号括起来,我们可以看做是一个jsonObject对象,因此我们创建一个QJsonObject对象
QJsonObject json_obj;
第2,3,4行都是简单的键值对,因此我们分别创建QJsonValue对象
json_obj.insert("FirstName", QJsonValue("John"));
json_obj.insert("LastName", QJsonValue("Doe"));
json_obj.insert("Age", QJsonValue(43));
//另一种写法------------------------------------------------------------------------------
json_obj["FirstName"] = "John";
json_obj["LastName"] = "Doe";
json_obj["Age"] = 43;
第5行的键值对的值是一个jsonObject对象,因此我们创建一个QJsonObject对象,并插入值
QJsonObject address_obj;
address_obj.insert("Street", QJsonValue("Downing Street 10"));
address_obj.insert("City", QJsonValue("London"));
address_obj.insert("Country", QJsonValue("Great Britain"));
//把address_obj添加到json_obj中
json_obj.insert("Address", QJsonValue(address_obj));
//冒号右侧的都是jsonValue对象,QJsonValue可以通过jsonObject对象初始化
//另一种写法------------------------------------------------------------------------------
QJsonObject address_obj;
address_obj["Street"] = "Downing Street 10";
address_obj["City"] = "London";
address_obj["Country"] = "Great Britain";
//把address_obj添加到json_obj中
json_obj["Address"] = address_obj;
第10行的键对值的值是一个jsonArray对象,因此我们创建一个QJsonArray对象,并插入值
QJsonArray phonenum_array;
phonenum_array.insert(0, QJsonValue("+44 1234567"));
phonenum_array.insert(1, QJsonValue("+44 2345678"));
//把phonenum_array添加到json_obj中
json_obj.insert("Phone numbers", QJsonValue(phonenum_array));
//冒号右侧的都是jsonValue对象,QJsonValue可以通过jsonArray对象初始化
此时,我们已经通过json_obj把最外面大括号里面的东西都包含了
生成json文件
QJsonDocument json_document;
json_document.setObject(json_obj);
QFile file("D:/WXDPlatform/1.json");
if(file.open(QIODevice::WriteOnly))
{
file.write(json_document.toJson());
file.close();
}
生成一个json文件成功!
三、读取一个json文件?
以下面这个为例,文件名为1.json
{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"Phone numbers": [
"+44 1234567",
"+44 2345678"
]
}
首先读取这个文件,将其从json文件转为QJsonDocument格式
//1,读取该文件内容
QFile file("D:/WXDPlatform/1.json");
QByteArray ba_json;
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "fail to open" << file.fileName();
return;
}
ba_json = file.readAll();
file.close();
//2,将json文件转为QJsonDocument格式
QJsonParseError json_error;
QJsonDocument json_document = QJsonDocument::fromJson(ba_json, &json_error);
if (json_document.isNull())
{
qDebug() << json_error.errorString();
return;
}
观察json内容,最外层是一对大括号,可以转换为一个jsonObject对象
//首先判断json_document是否可以转换为一个object
if(!json_document.isObject())
return;
//创建json_obj对象
QJsonObject json_obj;
json_obj = json_document.object();
解析第2,3,4行的简单键值对
QString strFirstName = json_obj.value("FirstName").toString();
QString strLastName = json_obj.value("LastName").toString();
int iAge = json_obj.value("Age").toInt();
第5行的值可以转换为一个jsonObject对象
QJsonValue json_value = json_obj.value("Address");
if(!json_value.isObject())
return;
QJsonObject address_obj = json_value.toObject();
QString strStreet = address_obj .value("Street").toString();
QString strCity = address_obj .value("City").toString();
QString strCountry = address_obj .value("Country").toString();
第10行的值可以转换为一个jsonArray对象
QJsonValue json_value = json_obj.value("Phone numbers");
if(!json_value.isArray())
return;
QJsonArray address_array = json_value.toArray();
QString strStreet = address_array.at(0).toString();
QString strCity = address_array.at(1).toString();
//另一种写法------------------------------------------------------------------------------
//如果不清楚QJsonArray的数量,可以使用遍历(假设为string)
QStringList address_list;
for (int i = 0; i < address_array.size(); ++i)
{
QString address = address_array.at(i).toString();
address_list.append(address);
}
读取一个json文件完成!