目录
- JSON介绍
- 将json文件放置在根目录下
- QJson转换
- 根据自己需求提取JSON
- 编译输出JSON文件信息
- 获取网络图片
- 提取JSON显示在UI组件上
- 建立读取JSON文件槽函数
- 建立槽函数连接
JSON介绍
JSON全程JavaScript Object Notation,作为一种轻量级的数据交换格式,正在逐步取代xml,成为网络数据的通用格式。以大括号作为起止符,实质是不排序的键值对。其中键要求是QString类型,值可以是任意类型。
将json文件放置在根目录下
QJson转换
将打开的QJson文件类型为QByteArray转换成QJsonDocument对象;将QJsonDocument对象转换成QJsonObject对象;将QJsonObject对象转换成 QJsonArray数组 。
QByteArray fileDate = file.readAll();
//将QByteArray转换成QJsonDocument
QJsonDocument fileDoc = QJsonDocument::fromJson(fileDate);
//根据服务器或者josn文件的json数组格式,判断是jsonObject还是jsonArray
QJsonObject object = fileDoc.object();
//通过key来读取数据
QJsonArray resultArray = object.value("result").toArray();
//QJsonArray也是一个数组
根据自己需求提取JSON
**截取部分json文件**
{
"resultcode": "200",
"reason": "成功的返回",
"result": [
{
"movieid": "10641",
"rating": "7.3",
"genres": "动作/惊悚/科幻",
"runtime": "139 min",
"language": "英语/法语/日语",
"title": "哥斯拉",
"poster": "http://v.juhe.cn/movie/img?5146",
"writers": "迪安·德夫林,罗兰·艾默里奇,...",
"film_locations": "美国",
"directors": "罗兰·艾默里奇",
"rating_count": "3191",
"actors": "马修·布罗德里克 Matthew Broderick,让·雷诺 Jean Reno,玛丽亚·皮提罗 Maria Pitillo,汉克·阿扎利亚 Hank Azaria",
"plot_simple": "一道亮光划过天际,太平洋上波涛汹涌,海浪以不可思议的速度将一架货机卷入海里;巴哈马丛林中,出现了巨大的脚印;一股神秘的力量一直朝纽约而来,这座人口稠密的都市即将受到这个怪兽“哥斯拉”的袭击。“哥斯拉”是因为核试验造成气..",
"year": "1998",
"country": "美国",
"type": "null",
"release_date": "19980518",
"also_known_as": "酷斯拉,怪兽哥斯拉"
},
{
"movieid": "133175",
"rating": "-1",
"genres": "动画/短片/喜剧",
"runtime": "2 min",
"language": "无",
"title": "小鹿斑比遇见哥斯拉",
"poster": "http://v.juhe.cn/movie/img?14923",
"writers": "Marv Newland",
"film_locations": "加拿大",
"directors": "Marv Newland",
"rating_count": "7",
"actors": "",
"plot_simple": "null",
"year": "1969",
"country": "加拿大",
"type": "null",
"release_date": "20090418",
"also_known_as": ""
},
编译输出JSON文件信息
for(int i=0; i< resultArray.size(); i++)
{
QJsonObject resultObject = resultArray.at(i).toObject();
QString genres = resultObject.value("genres").toString();
QString runtime = resultObject.value("runtime").toString();
QString language = resultObject.value("language").toString();
QString title = resultObject.value("title").toString();
QString poster = resultObject.value("poster").toString();
QString film_locations = resultObject.value("film_locations").toString();
qDebug() <<genres;
qDebug() <<runtime;
qDebug() <<language;
qDebug() <<title;
qDebug() <<poster;
qDebug() <<film_locations;
}
获取网络图片
这里用到俩个类QNetworkRequest类和QUr类l。
QUrl类:它可以解析和构造编码和非编码形式的url。QUrl还支持国际化域名(IDN)。使用QUrl最常见的方法是通过传递QString通过构造函数初始化它;否则,也可以使用setUrl()。URL可以用两种形式表示:编码的或未编码的。未编码的表示形式适合显示给用户,但编码的表示形式通常是发送给web服务器的内容。例如,未编码的URL“http://bühler.example.com/List of applicators.xml”将作为“http://xn–bhler kva.example.com/List%20of%20applicators.xml”发送到服务器。
QNetworkRequest类: QNetworkRequest类保存要用QNetworkAccessManager发送的请求。QNetworkRequest是网络访问API的一部分,它是一个类,包含通过网络发送请求所需的信息。它包含一个URL和一些可以用来修改请求的辅助信息。
提取JSON显示在UI组件上
QJsonObject resultObject = resultArray.at(5).toObject();
QString genres = resultObject.value("genres").toString();
QString runtime = resultObject.value("runtime").toString();
QString language = resultObject.value("language").toString();
QString title = resultObject.value("title").toString();
QString poster = resultObject.value("poster").toString();
QString film_locations = resultObject.value("film_locations").toString();
ui->genresLabel->setText(genres);
ui->runtimeLabel->setText(runtime);
ui->languageLabel->setText(language);
ui->titleLabel->setText(title);
ui->posterLabel->setText(poster);
ui->film_locationsLabel->setText(film_locations);
建立读取JSON文件槽函数
void JsonFile::readDate(QNetworkReply*reply)
{
QByteArray array = reply->readAll();
QPixmap mmp;
mmp.loadFromData(array);//loadFromData:是一个重载函数,使用指定的格式和转换标志从二进制数据加载pixmap
ui->posterLabel->setPixmap(mmp);
}
建立槽函数连接
//当请求的网络完成时,会发送一个finished信号
connect(&manger,&QNetworkAccessManager::finished,this,&JsonFile::readDate);
```![在这里插入图片描述](https://img-blog.csdnimg.cn/2020042318291921.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU4NTc1MQ==,size_16,color_FFFFFF,t_70)