JSON数据格式是网络中常用的一种数据传输格式,通常是一个key值对应一个value值。在Qt中使用自带库就可以实现JSON的生成和解析(QJsonObject、QJsonArray、QJsonDocument)。以下面这个例子进行说明:
生成JSON
首先我们先来分析一下这个JSON内容,有三个对象:name、info和province。其中name和info都是一个key值对应一个value值,直接insert即可。只有province中包含一个数组,其中该数组又包含两个对象。生成JSON的话,从里往外分析,以province为例,先写两个对象,再将这两个对象加入到这个数组中(append),再将这个数组包含在外部对象中即可。下面是生成代码:
QJsonObject rootObj;
// 插入name
rootObj.insert("name","China");
// 插入 info 字段
QJsonObject infoObj;
infoObj.insert("capital","beijing");
infoObj.insert("asian","true");
infoObj.insert("founder","1949");
rootObj.insert("info",infoObj);
// 插入 provinces 字段
QJsonArray provinceArray;
QJsonObject provinceSdObj;
provinceSdObj.insert("name","shanghai");
provinceSdObj.insert("capital","jinan");
QJsonObject provinceZjObj;
provinceZjObj.insert("name","zhejiang");
provinceZjObj.insert("capital","hangzhou");
provinceArray.append(provinceSdObj);
provinceArray.append(provinceZjObj);
rootObj.insert("province",provinceArray);
// 将rootObj转换为JSON字符串
QJsonDocument doc(rootObj);
QByteArray json = doc.toJson();
// 打印输出
qDebug()<<"字符串:"<<QString(json).toUtf8().data();
// 将JSON写入到文件
QFile file("D:\\JSON_Test.json");
file.open(QFile::WriteOnly);
file.write(json);
解析JSON
JSON的解析,按照由外往里的逻辑进行遍历判断,以下是完整代码:
// 1.读取文件
QFile file("D:\\china.json");
file.open(QFile::ReadOnly);
QByteArray json = file.readAll();
file.close();
QJsonDocument doc = QJsonDocument::fromJson(json);
if(!doc.isObject()){
qDebug()<<"读出该数据不是一个对象";
return;
}
// 2.开始解析
QJsonObject obj = doc.object();
QStringList keys = obj.keys();
for(int i=0; i<keys.size(); i++){
QString key = keys[i];
QJsonValue value = obj.value(key);
if(value.isBool())
{
// 布尔
qDebug()<<key<<":"<<value.toBool();
}else if(value.isString()){
// 字符串
qDebug()<<key<<":"<<value.toString();
}else if(value.isDouble()){
// 浮点型
qDebug()<<key<<":"<<value.toInt();
}else if(value.isArray()){
qDebug()<<key;
// 数组
QJsonArray provinceArray = value.toArray();
for(int i=0; i<provinceArray.size(); i++){
QJsonObject provinceObj = provinceArray[i].toObject();
QString name = provinceObj["name"].toString();
QString capital = provinceObj["capital"].toString();
qDebug()<<" "<<"name"<<":"<<name;
qDebug()<<" "<<"capital"<<":"<<capital;
}
}else if(value.isObject()){
// 对象
qDebug()<<key<<":";
QJsonObject infoObj = value.toObject();
QString capital = infoObj["capital"].toString();
bool asian = infoObj["asian"].toBool();
int founder = infoObj["founder"].toInt();
qDebug()<<" "<<"capital"<<":"<<capital;
qDebug()<<" "<<"asian"<<":"<<asian;
qDebug()<<" "<<"founder"<<":"<<founder;
}
}
如果对您有所帮助,记得点个赞再走呦~