当前位置:网站首页>Qt实现json解析

Qt实现json解析

2022-07-05 10:01:00 InfoQ



前提要点

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

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

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可读

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

利用Qt自带库 获取json内容 
QJsonDocument::fromJson(data)
 判断是否为引用类型
2.显示关键字所对应的内容
QStringList keys = obj.keys();
for(int i=0;i<keys.size();i++)
 {
 qDebug() << &quot;key&quot; << i << &quot; is:&quot; << keys.at(i);
 }

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

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

1.第一种json格式
json文件 内容:

{
 &quot;optionA&quot;: &quot;aaa&quot;,
 &quot;optionB&quot;: &quot;bbbb&quot;,
 &quot;score&quot;: 3
}

解析代码:

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

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

&quot;questinList&quot;: [{
 &quot;optionA&quot;: &quot;aaa&quot;,
 &quot;optionB&quot;: &quot;bbbb&quot;,
 }, {
 &quot;optionA&quot;: &quot;aaa&quot;,
 &quot;optionB&quot;: &quot;bbbb&quot;,
 }]

解析代码:

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

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

今天的更新到此结束! 希望各位大佬批评指教!
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/54049a4267a451dab8cef62dd