QJsonValue:
表示JSON值,可以是基本类型、QJsonArray、QJsonObject。
QJsonValue::Type | 描述 |
---|---|
QJsonValue::Null | null值 |
QJsonValue::Bool | 存储的是bool值,可以通过toBool转换为bool类型 |
QJsonValue::Double | 存储的是double值,可以通过toDouble转换为double类型 |
QJsonValue::String | 存储的是字符串类型,可以通过toString转换为QString类型 |
QJsonValue::Array | 存储的是数组,可以通过toArray转换为QJsonArray类型 |
QJsonValue::Object | 存储的json对象,可以通过toObject转换为QJsonObject类型 |
QJsonObject:
封装了一个JSON对象,通过成员函数size()、insert()、remove()来修改JSON数据。
//可通过初始化列表构造QJsonObject对象
QJsonObject obj({ { "name", "shelly" }, { "age", 20 } });
//通过insert方法添加键值对
obj.insert(const QString &key, const QJsonValue &value);
//取值
obj.value("name");
obj["name"];
//查找
obj.contains("name");
auto iter = obj.find("name");
qDebug()<<iter.key()<<iter.value();
//遍历
for (auto iter = obj.begin(); iter != obj.end(); iter++){
qDebug() << iter.key() << iter.value();}
//删除
obj.remove("name");
//取走
obj.take("name");
可以和QVarientMap或QVarientHash互相转换。
QJsonObject中插入键值对不会按insert顺序排序,且存储容量有上限。
QJsonArray:
封装了一个JSON数组 ,可以理解为放置了一组QJsonValue
QJsonObject obj({ { "name", "shelly" }, { "age", 20 } });
QJsonArray array;
array.push_back(obj);
array.push_front(QJsonObject({{"like","lotus root"},{"unlike","durian"}}));
array.append("def");
array.insert(1,"abc");
qDebug()<<array;
//取值
array[0];
array.at(2);
//删除
array.remove[0];
//替换
array.replace(0,"list");
//遍历
for(auto value : array){
qDebug()<<value;
}
输出结果:
{ }表示一个JSON对象;
[ ]表示一个JSON数组,内容可以是普通的值,也可以是一个JSON对象。
可从QStringList或QVariantList转换。
QJsonDocument:
提供一种读取和写入JSON文档的方法,通过成员函数array()或object()检索文档中包含的数组或对象,读取或修改JSON数据。
QJsonObject jsonData = QJsonDocument::fromJson(data).object();
序列化
QJsonDocument可以从QJsonObject或QJsonArray构造,然后使用toJson方法序列化成QByteArray:
QJsonDocument jsonDoc;
jsonDoc.setObject(obj1);
jsonDoc.setArray(ary1);
QByteArray byte = jsonDoc.toJson(QJsonDocument::Compact);//传入参数获取压缩后的序列化结果
反序列化
QJsonDocument提供了静态方法fromJson来创建QJsonDocument对象:
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(file.readAll(),&jsonError);
if (jsonError.error != QJsonParseError::NoError) {
qDebug()<<QStringLiteral("解析Json失败");
return;
}
可以通过isArray()或isObject()判断是否是object或array。