qt5 解析Json文件

本文详细介绍了如何使用QT5的QJsonDocument和QJsonObject类来读取和解析Json文件,包括处理字符串、对象和数组等不同类型的值。通过示例代码展示了从Json文件中获取特定字段和遍历Json对象的方法。
摘要由CSDN通过智能技术生成
[cpp]  view plain  copy
  1. /* test.json */  
  2. {  
  3.    "appDesc": {  
  4.       "description""SomeDescription",  
  5.       "message""SomeMessage"  
  6.    },  
  7.    "appName": {  
  8.       "description""Home",  
  9.       "message""Welcome",  
  10.       "imp":["awesome","best","good"]  
  11.    }  
  12. }  
  13.   
  14.   
  15. void readJson()  
  16.    {  
  17.       QString val;  
  18.       QFile file;  
  19.       file.setFileName("test.json");  
  20.       file.open(QIODevice::ReadOnly | QIODevice::Text);  
  21.       val = file.readAll();  
  22.       file.close();  
  23.       qWarning() << val;  
  24.       QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());  
  25.       QJsonObject sett2 = d.object();  
  26.       QJsonValue value = sett2.value(QString("appName"));  
  27.       qWarning() << value;  
  28.       QJsonObject item = value.toObject();  
  29.       qWarning() << tr("QJsonObject of description: ") << item;  
  30.   
  31.       /* incase of string value get value and convert into string*/  
  32.       qWarning() << tr("QJsonObject[appName] of description: ") << item["description"];  
  33.       QJsonValue subobj = item["description"];  
  34.       qWarning() << subobj.toString();  
  35.   
  36.       /* incase of array get array and convert into string*/  
  37.       qWarning() << tr("QJsonObject[appName] of value: ") << item["imp"];  
  38.       QJsonArray test = item["imp"].toArray();  
  39.       qWarning() << test[1].toString();  
  40.    }  


http://stackoverflow.com/questions/15893040/how-to-create-read-write-json-files-in-qt5


摘于上面的链接,大部分已经能用了。


我来说下其他情况:

[javascript]  view plain  copy
  1. {"file":"book.png","frames":{  
  2. "v1":{"x":1,"y":91,"w":68,"h":87,"offX":0,"offY":0,"sourceW":68,"sourceH":87},  
  3. "v2":{"x":1,"y":1,"w":68,"h":88,"offX":0,"offY":0,"sourceW":68,"sourceH":88},  
  4. "v3":{"x":209,"y":1,"w":66,"h":87,"offX":0,"offY":0,"sourceW":66,"sourceH":87},  
  5. "v4":{"x":71,"y":1,"w":67,"h":88,"offX":0,"offY":0,"sourceW":67,"sourceH":88},  
  6. "v5":{"x":71,"y":91,"w":67,"h":88,"offX":0,"offY":0,"sourceW":67,"sourceH":88},  
  7. "v6":{"x":140,"y":1,"w":67,"h":87,"offX":0,"offY":0,"sourceW":67,"sourceH":87},  
  8. "v7":{"x":140,"y":90,"w":67,"h":87,"offX":0,"offY":0,"sourceW":67,"sourceH":87}}}  

像这样的json,想要得到frames里所有的内容,因为它不是一个数组,所以要用迭代器来访问,类似这样的代码:


[cpp]  view plain  copy
  1. bool MainWindow::parseJsonFile(){  
  2.   
  3.     QString val;  
  4.     QFile file;  
  5.     file.setFileName("test.json");  
  6.     file.open(QIODevice::ReadOnly | QIODevice::Text);  
  7.     val = file.readAll();  
  8.     file.close();  
  9.     qWarning() << val;  
  10.     QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());  
  11.     QJsonObject rootObject = d.object();  
  12.     QJsonValue pngNameJsonValue = rootObject.value(QString("file"));  
  13.     qWarning() << pngNameJsonValue.toString();  
  14.   
  15.     QJsonValue framesJsonValue = rootObject.value(QString("frames"));  
  16.     qWarning() << framesJsonValue;  
  17.   
  18.     QStringList imgNameList = framesJsonValue.toObject().keys();  
  19.     QJsonObject frameObject = framesJsonValue.toObject();  
  20.     int index = 0;  
  21.     for(auto beginItr = frameObject.begin(); beginItr != frameObject.end(); ++beginItr){  
  22.   
  23.        QJsonValue eachImageJsonValue = *beginItr;  
  24.   
  25.        QJsonObject eachImageJsonObject = eachImageJsonValue.toObject();  
  26.        
  27.        //eachImageJsonObject["x"], eachImageJsonObject["y"] ...  
  28.     }  
  29.     return true;  
  30. }  

还有QJsonValue里用.keys()得到所有的key,然后就可以通过["key"] 来访问了。

http://www.waitingfy.com/archives/1775


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值