JSON物件和陣列
阿新 • • 發佈:2019-02-01
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();
}