qt5 解析Json文件

/* test.json */
{
   "appDesc": {
      "description": "SomeDescription",
      "message": "SomeMessage"
   },
   "appName": {
      "description": "Home",
      "message": "Welcome",
      "imp":["awesome","best","good"]
   }
}

void readJson()
   {
      QString val;
      QFile file;
      file.setFileName("test.json");
      file.open(QIODevice::ReadOnly | QIODevice::Text);
      val = file.readAll();
      file.close();
      qWarning() << val;
      QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());
      QJsonObject sett2 = d.object();
      QJsonValue value = sett2.value(QString("appName"));
      qWarning() << value;
      QJsonObject item = value.toObject();
      qWarning() << tr("QJsonObject of description: ") << item;

      /* incase of string value get value and convert into string*/
      qWarning() << tr("QJsonObject[appName] of description: ") << item["description"];
      QJsonValue subobj = item["description"];
      qWarning() << subobj.toString();

      /* incase of array get array and convert into string*/
      qWarning() << tr("QJsonObject[appName] of value: ") << item["imp"];
      QJsonArray test = item["imp"].toArray();
      qWarning() << test[1].toString();
   }

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

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

我来说下其他情况:

{"file":"book.png","frames":{
"v1":{"x":1,"y":91,"w":68,"h":87,"offX":0,"offY":0,"sourceW":68,"sourceH":87},
"v2":{"x":1,"y":1,"w":68,"h":88,"offX":0,"offY":0,"sourceW":68,"sourceH":88},
"v3":{"x":209,"y":1,"w":66,"h":87,"offX":0,"offY":0,"sourceW":66,"sourceH":87},
"v4":{"x":71,"y":1,"w":67,"h":88,"offX":0,"offY":0,"sourceW":67,"sourceH":88},
"v5":{"x":71,"y":91,"w":67,"h":88,"offX":0,"offY":0,"sourceW":67,"sourceH":88},
"v6":{"x":140,"y":1,"w":67,"h":87,"offX":0,"offY":0,"sourceW":67,"sourceH":87},
"v7":{"x":140,"y":90,"w":67,"h":87,"offX":0,"offY":0,"sourceW":67,"sourceH":87}}}

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

bool MainWindow::parseJsonFile(){

    QString val;
    QFile file;
    file.setFileName("test.json");
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    val = file.readAll();
    file.close();
    qWarning() << val;
    QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());
    QJsonObject rootObject = d.object();
    QJsonValue pngNameJsonValue = rootObject.value(QString("file"));
    qWarning() << pngNameJsonValue.toString();

    QJsonValue framesJsonValue = rootObject.value(QString("frames"));
    qWarning() << framesJsonValue;

    QStringList imgNameList = framesJsonValue.toObject().keys();
    QJsonObject frameObject = framesJsonValue.toObject();
    int index = 0;
    for(auto beginItr = frameObject.begin(); beginItr != frameObject.end(); ++beginItr){

       QJsonValue eachImageJsonValue = *beginItr;

       QJsonObject eachImageJsonObject = eachImageJsonValue.toObject();

       //eachImageJsonObject["x"], eachImageJsonObject["y"] ...
    }
    return true;
}

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

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

时间: 2024-12-04 16:33:15

qt5 解析Json文件的相关文章

QT开发(六十二)———QT5解析Json文件

QT开发(六十二)---QT5解析Json文件 一.QT5 Json简介 QT4中使用第三方库QJson解析JSON文件. QT5新增加了处理JSON的类,类均以QJson开头,包含在QtCore模块中.QT5新增加六个相关类: QJsonArray 封装 JSON 数组 QJsonDocument 读写 JSON 文档 QJsonObject 封装 JSON 对象 QJsonObject::iterator 用于遍历QJsonObject的STL风格的非const遍历器 QJsonParseE

python解析json文件

概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象. JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集. Python2.6开始加入了JSON模块,无需另外下载,Python的Json模

Android--------使用gson解析json文件

##使用gson解析json文件 **json的格式有两种:** **1. {}类型,及数据用{}包含:** **2. []类型,即数据用[]包含:** 下面用个例子,简单的介绍gson如何解析json,仅使用~ 先发两个json 内容 1.最外层是{} {             "resp": "ok",         "result": {             "date": "2013-4-19 16:

使用rapidJson解析json文件

今天介绍如果如何使用rapidJson解析json文件~笔者之前也使用过json库,可惜搬到cocos2d-x使用过程出现问题...忘了什么问题,搞了很久解决不了,索性使用cocos2d-x自带的json解析库~ 首先引入头文件,#include "cocostudio/CocoStudio.h",因为从cocosStudio导入项目的时候会有json文件~ 接着就是解析: std::string filePath = FileUtils::getInstance()->full

Java性能优化:正确的解析JSON文件

数据收集服务平均1小时OOM(java.lang.OutOfMemoryError: GC overhead limit exceeded)一次,发现都是在下载处理 JSON Atom Feed时OOM.怀疑是处理feed内存峰值消耗过大导致频繁Full GC.如下图: 分析过程 服务每15分钟会从Feed Server下载36个数据文件,包括12个17M,12个18M和12个100多M的文件.数据格式为JSON.由于服务是一次性加载整个JSON文件,然后转换成java对象.这个地方内存消耗可能

使用google-gson类库解析json文件

使用google-gson类库解析json文件 使用JsonParser解析器来解析字符串和输入流,变成json对象 代码如下: public class Readjson { public static void main(String[] args) { try { JsonParser parser=new JsonParser(); JsonObject object=(JsonObject) parser.parse(new FileReader("test.json"));

oc解析JSON文件

1利用NSBundle 取得json文件路径 NSString *path=[[NSBundle mainBundle]pathForResource:@"help.json" ofType:nil]; 2把文件转成NSData NSData *data=[NSData dataWithContentsOfFile:path]; 3利用NSJSONSerialization把data解析成数组或字典类型 NSArray *dicArray=[NSJSONSerialization JS

Java解析JSON文件的方法(一)

一.首先需要在Eclipse工程中导入相关的jar包,jar包参见链接:http://yunpan.alibaba-inc.com/share/link/NdA5b6IFK 二.提供一份待解析的json文件,apkinfo.json如下: [ { "name":"帐号", "package_name":"com.android.account", "check_version":"1.2"

C#解析json文件的方法

C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较◆可读性 JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输 XML允许使用方便的标签,所以文件尺寸是要比J