当前位置: 首页 > news >正文

Qt实现json解析

前提要点

json文件,可通过键值的方式存储你所需要的数据,斌且支持多种类型存储,类似于一种结构化的数据库,在读取json文件时可通过相对应的关键字精准获取。他是一种树状结构,我们可以自己设定叶子的数量以及他所代表的寓意,指定每一个叶子的父亲,以及父亲的父亲......

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

1. 首先获取地址 读取json文件

```js
QFile file(QString::fromStdString(json));
bool bOpen = file.open(QIODevice::ReadOnly);
if (bOpen == false)
{
return item;
}
QByteArray data = file.readAll();
file.close();```

读取json文件 那一定要知道他的位置,通过位置理由QFile库 将文件打开`QIODevice::ReadOnly`设置文件为仅读取模式,如果设为可读可写,在后面的处理数据中,以防文件被中途修改。

2. 将数据转化为json可读

2.1、首先

```js
QJsonDocument doc = QJsonDocument::fromJson(data);//读写json文档
if (!doc.isObject())
{
return item;
}
```

利用Qt自带库 获取json内容 `QJsonDocument::fromJson(data)` 判断是否为引用类型

2.2、显示关键字所对应的内容

```
QStringList keys = obj.keys();
for(int i=0;i<keys.size();i++)
{
qDebug() << "key" << i << " is:" << keys.at(i);
}```

此方法是通过关键字的位置来获取关键字的内容,接下来将会使用另外一种方法:利用关键字读取相对应的内容。

2.3、json文件读取的不同方式,以及他的类型

第一种json格式

json文件 内容:

```
{
"optionA": "aaa",
"optionB": "bbbb",
"score": 3
}
```

解析代码:

```
QJsonObject obj = doc.object();//封装json对象
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
item.score = obj["score"].toInt();//int 类型 直接toint 不用转为字符串```

以上实例可发现,json主要是由关键字与所对应值构成,斌给有其他别的类型,可以直接解析。QJsonObject是封装一个json对象,可通过这个对象,使用以上方法来获取关键字的内容。

(注:["content"]所对应的内容一定要是与json文件中的关键字相同,否则解析成功)

第二种json格式

json文件 内容:

```
{
"optionA": "aaa",
"optionB": "bbbb",
"score": 3
}
```

解析代码:

```
QJsonObject obj = doc.object();//封装json对象
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
item.score = obj["score"].toInt();//int 类型 直接toint 不用转为字符串```

以上实例可发现,json
主要是由关键字与所对应值构成,斌给有其他别的类型,可以直接解析。QJsonObject是封装一个json对象,可通过这个对象,使用以上方法来获取关键字的内容。
(注:["content"]所对应的内容一定要是与json文件中的关键字相同,否则解析成功)

第二种json格式
json文件 内容:

```
"questinList": [{
"optionA": "aaa",
"optionB": "bbbb",
}, {
"optionA": "aaa",
"optionB": "bbbb",
}]```

解析代码:

```
QJsonArray questinlist = root["questinlist"].toArray();
for(int i = 0; i < questinlist.count(); i++)
{
QJsonObject obj = questinlist.at(i).toObject();
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
data.questinList.push_back(item);
}```

可通过json文件发现 questinList是一个list 它内部存储了许多的同样类型的数据组,就像是一个妈妈与她的孩子们,他的孩子们都拥有一样的基因,就是他们都拥有一样的关键字,但是每个人又有所不懂,所以他们的关键字所对应的数据不一定全都一样。一个妈妈就是一个Array,通过获取妈妈孩子的数量,将每个孩子带出来,然后转移到另一个存储他们的房子里。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

http://www.lryc.cn/news/209217.html

相关文章:

  • Ajax、Json深入浅出,及原生Ajax及简化版Ajax
  • 前端第一阶段测试
  • openlayers+vue的bug
  • 实时数仓-Hologres介绍与架构
  • asp.net教务管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计
  • 爬虫、数据清洗和分析
  • SpringBoot | SpringBoot中实现“微信支付“
  • 基于SSM和VUE的留守儿童信息管理系统
  • VMware 16开启虚拟机电脑就蓝屏W11解决方法
  • 【Bug——VMware Workstation】虚拟机桥接网络没有 VMnet0
  • centos中安装Mysql8.0
  • 简化对象和函数写法
  • GB/T28181流媒体相关协议详解
  • 十进制转二进制的算法代码 ← Python
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
  • LeetCode 面试题 16.07. 最大数值
  • PS 安装教程 2022版(全网最详细图文教程)
  • [Python] OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
  • 集合总结(Java)
  • 【ONE·Linux || 网络基础(一)】
  • Day12力扣打卡
  • SQL注入原理及思路(mysql)
  • vue核心面试题汇总【查缺补漏】
  • 使用WebStorm创建和配置TypeScript项目
  • vue源码分析(四)——vue 挂载($mount)的详细过程
  • 真机环境配置教程
  • 新电脑第一次重启后蓝屏
  • k8s statefulSet 学习笔记
  • gitlab 通过变量连接自建K8S
  • LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作