Qt实现json解析

举报
咚咚隆地咚 发表于 2022/09/09 09:55:52 2022/09/09
【摘要】 前提要点json文件,可通过键值的方式存储你所需要的数据,斌且支持多种类型存储,类似于一种结构化的数据库,在读取json文件时可通过相对应的关键字精准获取。他是一种树状结构,我们可以自己设定叶子的数量以及他所代表的寓意,指定每一个叶子的父亲,以及父亲的父亲… 1.  首先获取地址 读取json文件QFile file(QString::fromStdString(json));bool b...

前提要点

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() << "key" << i << " is:" << keys.at(i);


 }

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

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

1.第一种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文件中的关键字相同,否则解析成功)

2.第二种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,通过获取妈妈孩子的数量,将每个孩子带出来,然后转移到另一个存储他们的房子里。

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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。