Qt:JSON数据处理

QJsonValue:
表示JSON值,可以是基本类型、QJsonArray、QJsonObject。

QJsonValue::Type描述
QJsonValue::Nullnull值
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。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值