赞
踩
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换。同时也易于机器解析和生成。相对于Xml数据格式,有更好的可读性,并且在网络传输中有更好的传输效率。
Qt5之后,新增了对JSON数据格式的解析类:QJsonDocument、QJsonObject、QJsonArrary、QJsonValue。
JSON文档类。
JsonFormat
{
“Array”: [
true,
999,
“string”
],
“Key”: “Value”,
“null”: null
}
JSON的对象类,由键值对组成,也就是QString和QJsonValue组成。
JSON的数组类,由一系列的JSON的值(QJsonValue)组成
JSON的值。可以是bool、数字、字符串、数组、对象。
这里仅解析简单的不含嵌套结构的json文件,因为json文件和xml文件一样,如果不知道其内部的构造结构,解析出来比较麻烦,但是,如果你清楚其内部结构,就可以通过下述解析方法,轻松地解析出想要的数据。
QVector<QString> JsonOperate::ParseJsonFile(QString _path) { QVector<QString> _vec ; _vec.clear(); QDir _dir(_path); QFile _file(_dir.absoluteFilePath(_path));//创建文件对象 if(!_file.exists()) { qDebug()<<QString::fromLocal8Bit("不存在该文件!")<<endl; return _vec; } if(!_file.open(QIODevice::ReadOnly)) { qDebug()<<QString::fromLocal8Bit("文件打开失败!")<<endl; return _vec; } QByteArray _byte = _file.readAll(); QJsonParseError _error; QJsonDocument _doc = QJsonDocument::fromJson(_byte,&_error);//将json文件中的内容转成json文件对象 _file.close(); //开始解析 QJsonObject _obt; QJsonArray _array; if(_doc.isObject())//根节点是json对象 { _obt = _doc.object();//获取对应json对象 QStringList _keys = _obt.keys(); for(int i = 0;i < _keys.count();i ++)//将每个键值对组成 kes : value 的字符串格式 { QString _tempStr = _keys.at(i); _tempStr += ":"; _tempStr += _obt.value(_keys[i]).toString(); _vec.push_back(_tempStr); } } else { _array = _doc.array();//获取对应json数组 for(int i = 0;i < _array.count();i ++) { QString _tempStr = _array.at(i).toString(); _vec.push_back(_tempStr); } } return _vec; }
上面的解析方式仅适用于Qt5,如果是只使用C++的话,可以使用GitHub上jsoncpp库来解析JSON文件,用法也很简单:)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。