QJson总结
作者:互联网
JSON
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。JSON的本质是字符串,使用文本来表示一个JS对象的信息。一个JSON对象是一个键(key)-值(value)对的列表,其中key是可唯一表示的字符串,value由一个QJsonValue对象表示。
QJsonObject
在QT中,一个QJsonObject类代表一个JSON对象,其中包含了一至多对键值对,是一个QString到QJsonValue的印射,有下面这些常见的成员函数:
函数 | 作用 |
---|---|
QStringList keys() const | 返回该QJsonObject对象的key序列 |
QJsonValue take(const QString &key) | 返回key对应的值,若不存在该key,则返回的QJsonValue的类型为QJsonValue::Undefined,也可以用[]直接访问,二者等价 |
int QJsonObject::size() const | 返回键值对的个数 |
iterator QJsonObject::insert(const QString &key, const QJsonValue &value) | 插入一个键值对,返回对应迭代器,若key已经存在,则会覆盖 |
void QJsonObject::remove(const QString &key) | 移除键为key的键值对 |
iterator QJsonObject::find(const QString &key) | 查看键为key的键值对是否存在,返回迭代器,若不存在有j.find(key) == j.end() |
bool contains(const QString &key) const | 判断是否存在键为key的键值对 |
QJsonValue
QJsonValue代表JSON中的值,包括以下几种:
- QJsonValue::Null
- QJsonValue::Bool
- QJsonValue::Double
- QJsonValue::String
- QJsonValue::Array
- QJsonValue::Object //值也是QJsonObject,可嵌套
- QJsonValue::Undefined
利用下面的函数判断QJsonValue的值的类型
- bool isArray() const
- bool isBool() const
- bool isDouble() const
- bool isNull() const
- bool isObject() const
- bool isString() const
- bool isUndefined() const
通过上面的判断函数后,可以通过下面函数将QJsonValue的值转化为对应的值
- QJsonArray toArray() const
- bool toBool() const
- double toDouble() const
- int toInt() const
- QJsonObject toObject() const
- QString toString() const
- QVariant() toVariant() const
构建QJsonObject
可以利用参数列表直接构造:
QJsonArray array({1,2,3,4});
QJsonObject object//利用initializer_list构造
{
{"property1", 1},
{"property2", 2},
{"property3",array}
};
也可以利用insert的形式构造,上面的object与下面等价:
QJsonObject object;
QJsonArray array({1,2,3,4});
object.insert("property1",1);
object.insert("property2",2);
object.insert("property3",array);
从文件中读取json并解析
QJsonDocument类提供了读写JSON文档的方式,
我们可以通过该类的方法QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)
将一个json文档转换成QJsonDocument类,再利用object()
将QJsonDocument转化为QJSonObject然后处理
QString fileName ="test.json";
QFile loadFile(fileName);
if(!loadFile.open(QIODevice::ReadOnly))
{
qDebug() << "could't open projects json";
return 0;
}
QByteArray allData = loadFile.readAll();//读取文件
loadFile.close();
QJsonParseError json_error;//结合QJSonParseError进行解析
QJsonDocument doc(QJsonDocument::fromJson(allData, &json_error));//将QByteArray转换为QJsonDocument
if(json_error.error != QJsonParseError::NoError)//存在error
{
qDebug() << "exist json error!";
qDebug()<<json_error.errorString();//打印存在的error
return 0;
}
QJsonObject object = doc.object();
//事先知道json的格式,进行以下解析
QString name;
int age;
QString time;
if(object.contains("name"))//先判断存不存在
if(object.take("name").isString())//在判断QJsonValue的类型匹不匹配
name=object.take("name").toString();
if(object.contains("age"))
if(object.take("age").isDouble())
age=object.take("age").toInt();
if(object.contains("time"))
if(object.take("time").isString())
time=object.take("time").toString();
//其他的解析过程也类似...
标签:总结,QJsonValue,const,QJsonObject,bool,QString,key,QJson 来源: https://www.cnblogs.com/chinono/p/13973056.html