前提要点
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,通过获取妈妈孩子的数量,将每个孩子带出来,然后转移到另一个存储他们的房子里。
今天的更新到此结束! 希望各位大佬批评指教!
评论