Qt读取Json文件
lw只吃亿点. 人气:0一、示例Json文件内容
下方为本文所使用的Json文件的内容,其中包含字符串、数值、布尔、null、对象、数组、组合类型等(读取方式在本文第三节)
{ "str": "strVal", "number": 88, "bool": true, "null": null, "object": { "key1": "Val1", "key2": "Val2", "key3": "Val3" }, "array": [ "elem1", "elem2", "elem3", "elem4" ], "combination": [{ "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" }, { "name": "SoSo", "url": "http://www.SoSo.com" } ] }
二、Json读取会使用的类(介绍读取所使用的类在本文中的作用,个人理解)
- QJsonParseError:用于报告JSON解析期间的错误;当JSON串格式有问题时会存储错误
- QJsonDocument:提供了一种读取和写入JSON文档的方法;
- QJsonObject:用于读取对象类型数据和接收从QJsonDocument对象中获取的QJsonObject对象
- QJsonArray:用于读取数组类型数据
三、Json文件的读取
3.1 读取Json串到QByteArray中
QFile file("./jsonTest.json"); //创建QFile对象,并指定json文件路径 //打开json文件并判断(不成功则返回0) if(!file.open(QIODevice::ReadOnly)) return 0; //将文件内容读取到数组中 QByteArray data(file.readAll()); file.close(); //关闭文件
3.2 读取Json串到QJsonDocument,并使用QJsonParseError判断是否有错
QJsonParseError jError; //创建QJsonParseError对象 //使用QJsonDocument的fromJson函数读取json串,并将QJsonParseError对象传入获取错误值 QJsonDocument jDoc = QJsonDocument::fromJson(data, &jError); //判断QJsonParseError对象获取的error是否包含错误,包含则返回0 if(jError.error != QJsonParseError::NoError) return 0;
3.3 获取QJsonObject,并读取Json串中各类型的值
获取QJsonObject对象
QJsonObject jObj = jDoc.object();
获取常规类型的值
//读取字符串 QString strVal = jObj["str"].toString(); //读取数值(对应的数值转换成对应的类型) int numVal = jObj["number"].toInt(); //读取逻辑值 bool boolVal = jObj["bool"].toBool(); //读取空值(因其没有对应的to类型函数,可使用下方类型接收或isNull()函数判断) QVariant nullVal = jObj["null"].toVariant();
获取对象类型及其中的值
//对象类型需要使用新的QJsonObject对象存放,然后使用新的QJsonObject获取其中值 QJsonObject jObj2 = jObj["object"].toObject(); //获取jObj2中指定键的值(值对应的类型直接使用对应函数转) QString key1Val = jObj2["key1"].toString();
获取数组类型及其中的值
//对象类型需要使用QJsonArray对象存放 QJsonArray jArr = jObj["array"].toArray(); //获取jArr中指定下标的值(该值可通过如下方式接收或使用QJsonValue的对象接收) QString arr1Val = jArr.at(0).toString();
读取组合类型的值
//组合对象第一层类型为数组,需要使用QJsonArray对象存放 QJsonArray jArr2 = jObj["combination"].toArray(); //数组中存放的对象,使用QJsonObject接收 QJsonObject jObj3 = jArr2.at(0).toObject(); //获取对象中的指定键的值 QString name = jObj3["name"].toString();
总结
建议学习前先了解一下Json文件格式,其次为在编写代码的过程中需要细心,类似的对象名容易混淆
相关文章
加载全部内容