原创

Qt对Json的生成与解析Demo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/53284213

QJsonObject类用于封装JSON对象。JSON对象是键值对,其中键是唯一的字符串,其值由QJsonValue代表。一个QJsonObject可以从QVariantMap转换/被转换。QJsonArray类用于封装JSON数组。一个JSON数组列表值。该列表可以通过从阵列插入和移除QJsonValue的操纵。一个QJsonArray可以从QVariantList转换/被转换。


先看下效果:



引用#include <QJsonArray>、#include <QJsonDocument>这两个头文件

1、创建json

    QJsonArray json;
    json.insert(0, QString("Qt"));
    json.insert(1, QString("version"));
    json.insert(2, QString("shazhenyu"));
    json.insert(3, true);

    QJsonDocument document;
    document.setArray(json);
    QByteArray byte_array = document.toJson(QJsonDocument::Compact);
    QString json_str(byte_array);
    ui->label->setText("Create json: \n\n" + json_str + "\n\n\n\n");

同样道理,不用Array用Object也可以: 

    QJsonObject json;

    json.insert("Name", "Qt");
    json.insert("Year", 2018);
    json.insert("Platform", true);
    QJsonDocument document;

    document.setObject(json);
    QByteArray byteArray = document.toJson(QJsonDocument::Compact);
    QString strJson(byteArray);


2、解析json

    QJsonParseError json_error;
    QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);
    ui->label->setText(ui->label->text() + "Resolve json: \n\n");
    if(json_error.error == QJsonParseError::NoError)
    {
        if(parse_doucment.isArray())
        {
            QJsonArray array = parse_doucment.array();
            int size = array.size();
            for(int i = 0; i < size; i++)
            {
                ui->label->setText(ui->label->text() + "QJsonArray is " + QString::number(i) + ":");
                QJsonValue value = array.at(i);
                if(value.isString())
                {
                    QString string = value.toString();
                    ui->label->setText(ui->label->text() + string + "\n");
                }
                else if(value.isBool())
                {
                    bool flag = value.toBool();
                    ui->label->setText(ui->label->text() + (flag ? "true" : "false") + "\n");
                }
            }
        }
    }

同样的道理,不是Array是Object:

    QJsonParseError jsonError;
    QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError);  // 转化为 JSON 文档
    if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {  // 解析未发生错误
        if (doucment.isObject()) { // JSON 文档为对象
            QJsonObject object = doucment.object();  // 转化为对象
            if (object.contains("Name")) {  // 包含指定的 key
                 QJsonValue value = object.value("Name");  // 获取指定 key 对应的 value
                 if (value.isString()) {  // 判断 value 是否为字符串
                     QString strName = value.toString();  // 将 value 转化为字符串
                     qDebug() << "Name : " << strName;
                 }
            }
            if (object.contains("Year")) {
                 QJsonValue value = object.value("Year");
                 if (value.isInt()) {
                    int nFrom = value.toVariant().toInt();
                    qDebug() << "From : " << nFrom;
                 }
            }
            if (object.contains("Platform")) {
                QJsonValue value = object.value("Platform");
                if (value.isBool()) {
                    bool bCrossPlatform = value.toBool();
                    qDebug() << "CrossPlatform : " << bCrossPlatform;
                }
            }
       }
  }

文章最后发布于: 2016-11-22 12:02:28
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览