JSON对象和数组

来源:互联网 发布:淘宝网瓷灸罐 编辑:程序博客网 时间:2024/04/20 15:46

main.cpp

#include <QCoreApplication>#include <QJsonObject>#include <QJsonDocument>#include <QDebug>#include <QJsonArray>#include "game.h"/*{    "Cross Platform": true,    "From": 1991,    "Name": "Qt"}*/void jsonObject(){    // 构建 JSON 对象    QJsonObject json;    json.insert("Name", "Qt");    json.insert("From", 1991);    json.insert("Cross Platform", true);    // 构建 JSON 文档    QJsonDocument document;    document.setObject(json);    QByteArray byteArray = document.toJson(QJsonDocument::Compact);    QString strJson(byteArray);    qDebug() << "strJson: " << strJson; // "{\"Cross Platform\":true,\"From\":1991,\"Name\":\"Qt\"}"    // 解析 JSON 文档    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("From")) {                QJsonValue value = object.value("From");                if (value.isDouble()) {                    int nFrom = value.toVariant().toInt();                    qDebug() << "From : " << nFrom;                }            }            if (object.contains("Cross Platform")) {                QJsonValue value = object.value("Cross Platform");                if (value.isBool()) {                    bool bCrossPlatform = value.toBool();                    qDebug() << "CrossPlatform : " << bCrossPlatform;                }            }        }    }}/*[    "Qt",    5.7,    true]*/void jsonArray(){    // 构建 JSON 数组    QJsonArray json;    json.insert(0, QString("Qt"));    json.insert(1, QString("version"));    json.insert(2, true);//    json.append("Qt");//    json.append(5.7);//    json.append(true);    // 构建 JSON 文档    QJsonDocument document;    document.setArray(json);    QByteArray byteArray = document.toJson(QJsonDocument::Compact);    QString strJson(byteArray);    qDebug() << "strJson:" << strJson; // "[\"Qt\",\"version\",true]"    // 解析 JSON 文档    QJsonParseError jsonError;    QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError);  // 转化为 JSON 文档    if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) { // 解析未发生错误        if (doucment.isArray()) { // JSON 文档为数组            QJsonArray array = doucment.array();  // 转化为数组            int nSize = array.size();  // 获取数组大小            for (int i = 0; i < nSize; ++i) {  // 遍历数组                QJsonValue value = array.at(i);                if (value.type() == QJsonValue::String) {                    QString strName = value.toString();                    qDebug() << strName;                }                if (value.type() == QJsonValue::Double) {                    double dVersion = value.toDouble();                    qDebug() << dVersion;                }                if (value.type() == QJsonValue::Bool) {                    bool bCrossPlatform  = value.toBool();                    qDebug() << bCrossPlatform;                }            }        }    }}/*{    "Company": "Digia",    "From": 1991,    "Name": "Qt",    "Page": {        "Developers": "https://www.qt.io/developers/",        "Download": "https://www.qt.io/download/",        "Home": "https://www.qt.io/"    },    "Version": [        4.8,        5.2,        5.7    ]}*/void jsonObjectArray(){    // 构建 Json 数组 - Version    QJsonArray versionArray;    versionArray.append(4.8);    versionArray.append(5.2);    versionArray.append(5.7);    // 构建 Json 对象 - Page    QJsonObject pageObject;    pageObject.insert("Home", "https://www.qt.io/");    pageObject.insert("Download", "https://www.qt.io/download/");    pageObject.insert("Developers", "https://www.qt.io/developers/");    // 构建 Json 对象    QJsonObject json;    json.insert("Name", "Qt");    json.insert("Company", "Digia");    json.insert("From", 1991);    json.insert("Version", QJsonValue(versionArray));    json.insert("Page", QJsonValue(pageObject));    // 构建 Json 文档    QJsonDocument document;    document.setObject(json);    QByteArray byteArray = document.toJson(QJsonDocument::Compact);    QString strJson(byteArray);    qDebug() << "strJson:" << strJson; // strJson: "{\"Company\":\"Digia\",\"From\":1991,\"Name\":\"Qt\",\"Page\":{\"Developers\":\"https://www.qt.io/developers/\",\"Download\":\"https://www.qt.io/download/\",\"Home\":\"https://www.qt.io/\"},\"Version\":[4.7999999999999998,5.2000000000000002,5.7000000000000002]}"    // 解析 JSON 文档    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")) {                QJsonValue value = object.value("Name");                if (value.isString()) {                    QString strName = value.toString();                    qDebug() << "Name : " << strName;                }            }            if (object.contains("Company")) {                QJsonValue value = object.value("Company");                if (value.isString()) {                    QString strCompany = value.toString();                    qDebug() << "Company : " << strCompany;                }            }            if (object.contains("From")) {                QJsonValue value = object.value("From");                if (value.isDouble()) {                    int nFrom = value.toVariant().toInt();                    qDebug() << "From : " << nFrom;                }            }            if (object.contains("Version")) {                QJsonValue value = object.value("Version");                if (value.isArray()) {  // Version 的 value 是数组                    QJsonArray array = value.toArray();                    int nSize = array.size();                    for (int i = 0; i < nSize; ++i) {                        QJsonValue value = array.at(i);                        if (value.isDouble()) {                            double dVersion = value.toDouble();                            qDebug() << "Version : " << dVersion;                        }                    }                }            }            if (object.contains("Page")) {                QJsonValue value = object.value("Page");                if (value.isObject()) {  // Page 的 value 是对象                    QJsonObject obj = value.toObject();                    if (obj.contains("Home")) {                        QJsonValue value = obj.value("Home");                        if (value.isString()) {                            QString strHome = value.toString();                            qDebug() << "Home : " << strHome;                        }                    }                    if (obj.contains("Download")) {                        QJsonValue value = obj.value("Download");                        if (value.isString()) {                            QString strDownload = value.toString();                            qDebug() << "Download : " << strDownload;                        }                    }                    if (obj.contains("Developers")) {                        QJsonValue value = obj.value("Developers");                        if (value.isString()) {                            QString strDevelopers = value.toString();                            qDebug() << "Developers : " << strDevelopers;                        }                    }                }            }        }    }}int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);//   jsonObject();//   jsonArray();//   jsonObjectArray();    return a.exec();}