Qt C++读取json文件

1.读取文件内容到二进制流

1.1 使用QFile打开文件

QFile file(filepathname);
file.open(QIODevice::ReadOnly | QIODevice::Text);

1.2 使用QByteArray保存文件内容
QByteArray jsonData = file.readAll();

1.3 可以关闭文件了

file.close();

2.检查读取的这个文件是否符合json规范

2.1 使用QJsonDocument类对内容进行一次转换:QByteArray —》 QJsonDocument,将转换中可能出现的异常抛给QJsonParseError;

QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonData, &parseError);
if (parseError.error != QJsonParseError::NoError) {
    qDebug() << "转换过程出现错误:" << parseError.errorString();
    return false;
}

3.通过QJsonObject类、QJsonValue类、QJsonArray类,从“doc”中取获取我们想要的内容;

QJsonObject obj = doc.object();

这个obj对应在.json文件中的内容就是“{}”下的内容
比如

{
"a":"1",
"b":["1","2"],
"c":{
"c1":"1",
"c2":"2"
}
}

可以通过遍历,得到其中的键值对(如"a":“1”);

for (auto it = obj.begin(); it != obj.end(); ++it) {
	qDebug()<<it;
	qDebug()<<it.key();
	qDebug()<<it.value();
}

但当值value是{}或者[]时,就还需要继续解析;
{}还是继续转成QJsonObject

QJsonObject obj_2 = obj.value("c").toObject();
//obj.value("c")等价于obj["c"]

[]需要转换为QJsonArray;

QJsonArray array = doc.value("b").toArray();

array中就是单独的一个个值了,对array进行遍历

for(const QJsonValue &value | array){
	qDebug()<<value;
}

总结

qt c++读取json文件主要用的就是QJsonDocument、QJsonObject、QJsonArray、QJsonValue等类

并且为了符合需求会对各个值的类型进行转换,需要用到.toString、.toInt、.toObject、.toArray等方法。

另外有的值是数字时,json文件中是省略了引号""的,读值时需要注意是否读取到正确的值value。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值