您的位置:首页 > 编程语言 > Qt开发

Qt对Json的生成与解析Demo

2016-11-22 12:02 429 查看
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;

                }

            }

       }

  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: