一、什么是json

JSON就是数据封装形式,它是用来封装数据,相当于一个 包装盒子。
JSON对象 ---- > 单个类型的数据,比如:int char string
JSON数组 ----> 相当于一个数组,可以用来存放:int char ,类类型
在数据封装中,使用符号“{ }”代表对象,使用符号“[ ]”代表数组
JSON对象和JSON数组的关系:
        JSON对象可以嵌套JSON数组
        JSON数组可以嵌套JSON对象
        JSON对象可以嵌套JSON对象
        JSON数组可以嵌套JSON数组
下面是一个json格式的文件,(格式内容大家可以直接去网上去搜索json格式验证)
{  "error_code": 0, "reason": "请求成功!","result": [ {"day": 1,  "des": "1907年11月1日 电影导演吴永刚诞生   吴永刚,1907年11月1日生于江苏吴县。1932年后参加影片《三个摩登女性》、《母性之光》的拍摄工作。1934年在联华影片公司编导处女作《神女》,一举成名,...", "id": 9000,  "lunar": "丁未年九月廿六","month": 11,  "pic": "",  "title": "电影导演吴永刚诞生", "year": 1907  },{"day": 1,"des": "1902年11月1日 挪威作家格里格诞生   格里格,1902年11月1日生于卑尔根。挪威作家。   青年时代在奥斯陆和牛津求学,好旅行。1924年出版描写海员生活的小说《航船在前进》。1926年至1927年在...","id": 9010,"lunar": "壬寅年十月初二","month": 11,"pic": "","title": "挪威作家格里格诞生","year": 1902},{"day": 1,"des": "1911年11月1日,清廷宣布解散皇族内阁,任命袁世凯为内阁总理大臣,要他赶快从前线回京,筹组“责任内阁”。11月13日,袁世凯抵达北京,16日组织新内阁,以梁郭彦为外务大臣,赵秉钧为民政大臣,...","id": 3577,"lunar": "辛亥年九月十一","month": 11,"pic": "","title": "袁世凯出任清朝内阁总理大臣","year": 1911}]
}
从上面的格式可以看出:JSON数据都是键值对(key-value),可以通过键来获取对应的值
在QT中,对于Json数据的接口,我们通常使用面向对象的思想来描述
JSON文件 ------ 后缀(json)--------QJsonDocument --------比如:hello.json
JSON对象 -----QJsonObject
JSON数组 ------ QJsonArray
关于json接口类属于QT += core中

二、解析Json的步骤:

1.将JSON文件转换成QJsonDocument对象,具体来讲,是将json文件中的

数据转换成 json文档对象(QJsonDocument )
对应函数
QJsonDocument
fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
①功能:
                将QByteArray &json转换成QJsonDocument
        ②参数:
                QByteArray &json ------- json数据,它可以从JSON文件中进行读取
        
        2.从QJsonDocument对象中将JSON数据拿出来
对于于QJsonDocument中,只有两个部分组成:QJsonArray和 QJsonObject
QJsonObject object() const

功能:从QJsonDocument中得到一个QJsonObject

QJsonArray array() const

功能:从QJsonDocument中得到一个QJsonArray

3.要根据提供的数据格式来解析数据(下面代码就是根据上面的json文件进行解析的)
//1 读取文件中数据QFile file("../qt_day6_1_json_parser/text.json");if(file.open(QIODevice::ReadOnly)){QByteArray array =  file.readAll();//2. 数据解析 ---- 从文档的最外层开始,一层一层往里进行解析,遇见 "{" --- 就使用QJsonObject 遇见 "["--- 就使用QJsonArray//然后真正去获取值时,要通过键值对的键来进行,键是字符串类型--- value(QString key),最后,根据数据的类型通过to系统方法来转换完成//第一步:将字节数组转换成json文档QJsonDocument doc =  QJsonDocument::fromJson(array);//第二步:QJsonDocument文档类中,包括了json对象和json数据这两个成员,所以就有两对象set/get函数// QJsonObject object() const 和 void setObject(const QJsonObject &object)// void setArray(const QJsonArray &array)  QJsonArray array() const//根据json数据格式,最外面是json对象({})还是json数组([]),如果是json对象,则使用QJsonObject object() constQJsonObject object =  doc.object();//第三步:不管是json对象还是json数组,它们里面的数据都是键值对组成,所以,就可以通过键来获了对应的值 --- value//QJsonValue value(const QString &key) const  QJsonValue是可以转换成数字  字符串 和对象 数组,是//通过这个类的to****()方法来完成QJsonArray resultArray = object.value("result").toArray(); //如果是json数组的话,跟数组的概念完全相同//通过for循环来遍历 数据for (int i=0;i<resultArray.size();i++) {QJsonObject resultObject =  resultArray.at(i).toObject();QString title = resultObject.value("title").toString();int year = resultObject.value("year").toInt();qDebug() << "title = " << title;qDebug() << "year = " << year;}}file.close();

三、解析数据时常用的接口

1.对于QJsonDocument类:
①解析时:
QJsonArray array() const //通过get方法,得到QJsonDocument类中的json 数组QJsonObject object() const//通过get方法,得到QJsonDocument类中的json 对象

②打包时

void setArray(const QJsonArray &array)//将QJsonArray打包到 QJsonDocument中void setObject(const QJsonObject &object)

③将QJsonDocument和QByteArray相互转换的接口:

静态成员函数:

QJsonDocumen t fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
功能:将QByteArray数据转换成QJsonDocument
参数说明:
const QByteArray &json ------ 从JSON文件中读取的数据
QJsonParseError *error ----- QByteArray在转换成QJsonDocument,出错时,它的出错信息 做为一个输出参数
④将QJsonDocment转换成QByteArray
普通成员函数:
QByteArray toJson() const
QByteArray toJson(QJsonDocument::JsonFor mat format) const
功能:将QJsonDocment转换 成QByteArray,以便将数据写入到json文件中
2.QJsonArray类
①获取json数组中的数据元素

QJsonValue at(int i) const
参数说明:
int i ----- 数据元素的下标
返回值:
成功返回一个QJsonValue
QJsonValue它是json中封装的一个数据类型,类似于int,char ,它可以跟int 、double、QString QJsonArray QJsonObject之间可以相互转换
它代表以下6种类型之一:
它们的相互之间的转换使用to方法:
QJsonArray toArray(const QJsonArray &defaultValue) const QJsonArray toArray() const bool toBool(bool defaultValue = false) const double toDouble(double defaultValue = 0) const int toInt(int defaultValue = 0) const QJsonObject toObject(const QJsonObject &defaultValue) const QJsonObject toObject() const QString toString() const QString toString(const QString &defaultValue) const

②获取数组中 元素的个数

int size() const
3.QJsonObject类:
①根据键值来获得真正的数据
QJsonValue value(const QString &key) const
QJsonValue value(QLatin1String key) const
参数说明:
const QString &key ------->键值就来源于json数据文档中键---- 都是字符串类型
比如:
"genres": "动作/惊悚/科幻", ------ genres它就是键(key)
如果该键对应值为字符串,那么可以通过toString() const

QT日记八,QT中的json应用相关推荐

  1. 【QT日记】QT MYSQL 链接方法 QMYSQL driver not loaded解决方法 qt5.13 mysql5.7

    相信很多第一次在QT下链接MYSQL的朋友都会遇到这个问题: 读取不到QMYSQL的驱动,QSqlDatabase支持的驱动有:QSQLITE QODBC QODBC3 QPSQL QPSQL7 [就 ...

  2. Qt中的JSON支持

    Qt中的JSON支持 Qt中的JSON支持 概述 JSON类 Qt中的JSON支持 Qt提供了处理JSON数据的支持.JSON是一种对源自Javascript的对象数据进行编码的格式,但现在已广泛用作 ...

  3. 在QT中使用JSON

    在QT中使用JSON 在QT中使用JSON数据包其实很简单 1. QT中如何使用JSON JSON数据包一般有两种形式,一种是对象,一种是数组.用大括号 {} 扩起来的叫对象,用中括号 [] 扩起来的 ...

  4. Qt中的JSON操作_1: JSON的基本知识介绍(JSON格式、JSON数组、JSON对象、应用场景)

    总结放于前: JSON是一种利用JSON数组和JSON对象描述数据内容的数据格式,采用树状的结构,只能有一个父节点,子节点不设限,但父子节点均为JSON对象或者JSON数组. 1. Json 简介 J ...

  5. FFmpeg开发(八)——Qt视频播放器之多线程的使用(参考了暴风影音、迅雷影音)

    FFmpeg开发(八)--Qt视频播放器之多线程的使用(参考了暴风影音.迅雷影音) 上篇文章介绍了: FFmpeg开发(七)--Qt视频播放器之播放列表类(参考了暴风影音.迅雷影音) 本播放器系列相关 ...

  6. Qt on Android: http下载与Json解析

    百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你可以在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...

  7. 【原创】QT在嵌入式系统中显示中文的方法

    [原创]QT在嵌入式系统中显示中文的方法 此篇文章主要借鉴:http://zzqh007.blog.163.com/blog/static/44434847201011312168296/ 移植QT4 ...

  8. Qt 图形视图框架中的事件处理和传播

    目录名字 Qt 图形视图框架中的事件处理和传播 要点: Qt 图形视图框架中的事件处理和传播 图形视图框架在一些动画类的应用程序上经常会用到.该框架中的事件处理与传播机制也是经常会涉及. 程序设计核心 ...

  9. Qt工程文件Pro中判断Qt版本号

    需求 在Qt开发中,可能会有这样的需求,需要根据Qt版本来决定加载不同的库,或者定义宏.添加不同的文件等等,那这就需要在工程文件中对当前Qt版本进行判断了. 正文 Qt版本判断 最基础的需求,查看当前 ...

最新文章

  1. JavaScript对象的几种创建方式?
  2. 【转载】突然觉得今年的时间过得太快了,不知不觉中还剩下四个多月就步入2017年了,回首一下,好像什么都还没做呢。...
  3. 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)
  4. IAR 下C中嵌入汇编
  5. ParaView的简单用法
  6. 论大学学霸是怎样炼成的……
  7. 2021-01-01 中国公务员级别
  8. 云计算时代的软件行业变化
  9. 支持笔锋效果的手写签字控件
  10. java海贼王秘宝传说下载_我的世界1.7.10海贼王整合包
  11. IDEA 闪退,并在C盘生成文件java_error_in_idea_****.log
  12. 腾讯小程序php,微信小程序实现使用腾讯地图SDK步骤详细介绍
  13. bzoj4372 烁烁的游戏
  14. 图片去背景,在线图片去底色工具
  15. paymob QB冲值接口
  16. PID控制的理解与参数整定
  17. 安卓 Installation via USB is disabled
  18. PHP curl 执行结果老是301 Moved Permanently
  19. 2021智慧政务领域最具商业合作价值企业盘点
  20. 和iPhone14一样高的像素?全网首测OAK-1-MAX人工智能相机

热门文章

  1. css3运动后留下轨迹尾巴_利用CSS+JS实现唯美星空轨迹运动效果
  2. 随身助手在线music纯净版PHP源码
  3. CoreGraphics 画图,(转燕羽天空)
  4. ios safari 模拟器_电脑也能运行iOS?这款iOS模拟器到底靠谱吗
  5. was服务器配置文件路径,websphere(was)配置文件
  6. 快速入门并上手redis持久化技术RDB和AOF
  7. HR待遇怎么样?需要考取什么证书?
  8. 基于Arduino或者Stm32的智能台灯
  9. rlimit Linux下限制资源的使用(Limiting Resource Usage)
  10. 基于java+springboot+mybatis+vue+elementui的网上书籍购买商城