Qt中JSON的生成与解析

JSON数据格式是网络中常用的一种数据传输格式,通常是一个key值对应一个value值。在Qt中使用自带库就可以实现JSON的生成和解析(QJsonObject、QJsonArray、QJsonDocument)。以下面这个例子进行说明:
JSON实例

生成JSON

首先我们先来分析一下这个JSON内容,有三个对象:name、info和province。其中name和info都是一个key值对应一个value值,直接insert即可。只有province中包含一个数组,其中该数组又包含两个对象。生成JSON的话,从里往外分析,以province为例,先写两个对象,再将这两个对象加入到这个数组中(append),再将这个数组包含在外部对象中即可。下面是生成代码:

	QJsonObject rootObj;
    // 插入name
    rootObj.insert("name","China");

    // 插入 info 字段
    QJsonObject infoObj;
    infoObj.insert("capital","beijing");
    infoObj.insert("asian","true");
    infoObj.insert("founder","1949");

    rootObj.insert("info",infoObj);

    // 插入 provinces 字段
    QJsonArray provinceArray;

    QJsonObject provinceSdObj;
    provinceSdObj.insert("name","shanghai");
    provinceSdObj.insert("capital","jinan");

    QJsonObject provinceZjObj;
    provinceZjObj.insert("name","zhejiang");
    provinceZjObj.insert("capital","hangzhou");

    provinceArray.append(provinceSdObj);
    provinceArray.append(provinceZjObj);

    rootObj.insert("province",provinceArray);

    // 将rootObj转换为JSON字符串
    QJsonDocument doc(rootObj);
    QByteArray json = doc.toJson();

    // 打印输出
    qDebug()<<"字符串:"<<QString(json).toUtf8().data();

    // 将JSON写入到文件
    QFile file("D:\\JSON_Test.json");
    file.open(QFile::WriteOnly);
    file.write(json);

解析JSON

JSON的解析,按照由外往里的逻辑进行遍历判断,以下是完整代码:

	// 1.读取文件
    QFile file("D:\\china.json");
    file.open(QFile::ReadOnly);
    QByteArray json = file.readAll();
    file.close();

    QJsonDocument doc = QJsonDocument::fromJson(json);
    if(!doc.isObject()){
        qDebug()<<"读出该数据不是一个对象";
        return;
    }

    // 2.开始解析
    QJsonObject obj = doc.object();
    QStringList keys = obj.keys();
    for(int i=0; i<keys.size(); i++){
        QString key = keys[i];
        QJsonValue value = obj.value(key);

        if(value.isBool())
        {
            // 布尔
            qDebug()<<key<<":"<<value.toBool();
        }else if(value.isString()){
            // 字符串
            qDebug()<<key<<":"<<value.toString();
        }else if(value.isDouble()){
            // 浮点型
            qDebug()<<key<<":"<<value.toInt();
        }else if(value.isArray()){
            qDebug()<<key;
            // 数组
            QJsonArray provinceArray = value.toArray();
            for(int i=0; i<provinceArray.size(); i++){
                QJsonObject provinceObj = provinceArray[i].toObject();

                QString name = provinceObj["name"].toString();
                QString capital = provinceObj["capital"].toString();

                qDebug()<<" "<<"name"<<":"<<name;
                qDebug()<<" "<<"capital"<<":"<<capital;
            }

        }else if(value.isObject()){
            // 对象
            qDebug()<<key<<":";

            QJsonObject infoObj = value.toObject();
            QString capital = infoObj["capital"].toString();
            bool asian = infoObj["asian"].toBool();
            int founder = infoObj["founder"].toInt();

            qDebug()<<" "<<"capital"<<":"<<capital;
            qDebug()<<" "<<"asian"<<":"<<asian;
            qDebug()<<" "<<"founder"<<":"<<founder;
        }
    }

如果对您有所帮助,记得点个赞再走呦~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值