1. 程式人生 > >JSON物件和陣列

JSON物件和陣列

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(); }