写点什么

Qt 实现 json 解析

作者:用户10086
  • 2022 年 7 月 05 日
  • 本文字数:1321 字

    阅读完需:约 4 分钟


前提要点

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


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

发布于: 刚刚阅读数: 4
用户头像

用户10086

关注

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
Qt实现json解析_7月月更_用户10086_InfoQ写作社区