欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt中JSON使用的詳細步驟

 更新時間:2023年08月07日 09:43:15   作者:讀書札記2022  
本文主要介紹了Qt中JSON使用的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一.前言:

JSON是一種輕量級數據交換格式,常用于客戶端和服務端的數據交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,比如C,C++,Java,Android,Qt。除了JSON,還有一種數據傳輸格式XML,相較于XML,JSON更加便于閱讀和書寫。

JSON 有兩種數據格式:JSON對象和JSON數組。被中括號包裹的是JSON數組,被大括號包裹的是JSON對象。

二.JSON數組:

JSON數組的格式:[元素1,元素2,元素3,…]

示例1:元素可以是不同數據類型

[1,2,3.14,"hello world",true,null]

示例2:元素可以是JSON對象或JSON數組

[
    {
    "id":123,
    "name":"tom"
    },
    [1,2,3.14,"hello world",true,null]
]

三.JSON對象:

JSON對象的格式:一個或多個鍵值對組成

示例1:

{
    "id":123,
    "name":"tom"
}

示例2:嵌套JSON對象和JSON數組,JSON對象和JSON數組也要使用鍵值對格式

{
  "name": "John Doe",
  "age": 30,
  "address": {
      "city": "New York",
    "street": "123 Main St"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "555-1234"
    },
    {
      "type": "work",
      "number": "555-5678"
    }
  ],
  "hobbies": ["reading", "painting", "playing guitar"],
  "isStudent": true
}

小結:JSON數組里可以包含JSON對象或JSON數組,JSON對象里也可以嵌套JSON對象或JSON數組。

四.Qt中JSON的使用

1.生成JSON數據
2.解析JSON數據

在QT5.0版本以后支持對JSON的使用,QT5.0之前需要自己集成第三方庫。

1.生成JSON數據

要生成的JSON數據如下:

{
    "name": "小王",
    "age": 30,
    "address": {
        "city": "北京",
        "street": "人民路32號"
    },
    "phoneNumbers": [
        {
            "number": "999-123456",
            "type": "家"
        },
        {
            "number": "999-654321",
            "type": "公司"
        }
    ]
}

使用Qt生成上面的JSON數據:

#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>
void MainWindow::writeJSON()
{
    // 創(chuàng)建最外層的 JSON 對象,里面包含要構建的所有 JSON 數據
    QJsonObject rootObj;
    // 插入 name 鍵值對到 rootObj
    rootObj.insert("name","小王");
    // 插入 age 鍵值對到 rootObj
    rootObj.insert("age",30);
    // 創(chuàng)建地址 JSON 對象,里面包含兩個鍵值對
    QJsonObject addressObj;
    addressObj.insert("city","北京");
    addressObj.insert("street","人民路32號");
    // 插入地址 JSON 對象到 rootObj
    rootObj.insert("address",addressObj);
    // 創(chuàng)建電話 JSON 數組,里面包含兩個電話 JSON 對象
    QJsonArray phoneArray;
    // 創(chuàng)建兩個電話 JSON 對象
    QJsonObject phoneHomeObj;
    phoneHomeObj.insert("type","家");
    phoneHomeObj.insert("number","999-123456");
    QJsonObject phoneWorkObj;
    phoneWorkObj.insert("type","公司");
    phoneWorkObj.insert("number","999-654321");
    // 在電話 JSON 數組中添加兩個電話 JSON 對象
    phoneArray.append(phoneHomeObj);
    phoneArray.append(phoneWorkObj);
    // 插入電話 JSON 數組到 rootObj
    rootObj.insert("phoneNumbers",phoneArray);
    // 將 rootObj JSON對象轉換為 JSON 數據格式
    QJsonDocument doc(rootObj);
    QByteArray json = doc.toJson();
    // 打印
    qDebug()<<QString::fromUtf8(json);
}

2.解析JSON數據

要解析的JSON數據如下,先將它放在test.json文本文件中:

{
    "name": "小王",
    "age": 30,
    "address": {
        "city": "北京",
        "street": "人民路32號"
    },
    "phoneNumbers": [
        {
            "number": "999-123456",
            "type": "家"
        },
        {
            "number": "999-654321",
            "type": "公司"
        }
    ]
}

使用Qt解析上面的JSON數據:

#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>
#include <QFile>
void MainWindow::analyseJSON()
{
    // 讀取文本中的 JSON 數據
    QFile file("C:\\Users\\A\\Desktop\\temp\\test.json");
    file.open(QFile::ReadOnly);
    QByteArray json = file.readAll();
    file.close();
    // 將 JSON 數據轉換為 QJsonDocument 對象
    QJsonDocument doc = QJsonDocument::fromJson(json);
    if(!doc.isObject())
    {// 不是 JSON 對象:JSON 字符串格式錯誤或無效
        qDebug()<<"不是 JSON 對象:JSON 字符串格式錯誤或無效";
        return;
    }
    // 將 QJsonDocument 對象中的 JSON 數據轉換為 JSON 對象
    QJsonObject obj = doc.object();
    // 獲取 JSON 數據中的所有鍵
    QStringList keys = obj.keys();
    // 遍歷鍵值對
    for (int i = 0;i<keys.size();++i) 
    {
        // 獲取每一個 key
        QString key = keys[i];
        // 通過 key 獲取對應的 value
        QJsonValue value = obj.value(key);
        if(value.isBool())
        {// 值是一個 bool
            qDebug()<<key<<":"<<value.toBool();
        }
        else if(value.isString())
        {// 值是一個字符串
            qDebug()<<key<<":"<<value.toString();
        }
        else if(value.isDouble())
        {// 值是一個 double 或者 int(double 和 int 都用 isDouble)
            qDebug()<<key<<":"<<value.toInt();
        }
        else if(value.isObject())
        {// 值是一個 JSON 對象
            qDebug()<<key<<":";
            // 這里偷個懶,不再像上面那樣循環(huán)獲取值了,而是直接通過已知的鍵去獲取值
            QJsonObject addressObj = value.toObject();
            QString city = addressObj["city"].toString();
            QString street = addressObj["street"].toString();
            qDebug()<<"  "<<"city:"<<city;
            qDebug()<<"  "<<"street:"<<street;
        }
        else if (value.isArray())
        {// 值是一個 JSON 數組
            qDebug()<<key<<":";
            QJsonArray phoneArray = value.toArray();
            for (int i = 0;i<phoneArray.size();++i) 
            {// 遍歷 JSON 數組中的每一個 JSON 對象
                QJsonObject phoneObj = phoneArray[i].toObject();
                QString number = phoneObj["number"].toString();
                QString type = phoneObj["type"].toString();
                qDebug()<<"  "<<"number:"<<number;
                qDebug()<<"  "<<"type:"<<type;
            }
        }
    }
}

到此這篇關于Qt中JSON的使用的文章就介紹到這了,更多相關Qt JSON內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++中rapidjson將嵌套map轉為嵌套json的講解

    C++中rapidjson將嵌套map轉為嵌套json的講解

    今天小編就為大家分享一篇關于C++中rapidjson將嵌套map轉為嵌套json的講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • c++ 子類構造函數初始化及父類構造初始化的使用

    c++ 子類構造函數初始化及父類構造初始化的使用

    這篇文章主要介紹了c++ 子類構造函數初始化及父類構造初始化的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 詳解C語言初階基礎(2)

    詳解C語言初階基礎(2)

    這篇文章主要介紹了C語言中的初階基礎,介紹了其相關概念,具有一定參考價值。需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • 簡述c++ 發(fā)展史

    簡述c++ 發(fā)展史

    這篇文章主要介紹了c++ 發(fā)展的過程,幫助大家更好的了解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • C++?Qt開發(fā)之使用QUdpSocket實現UDP網絡通信

    C++?Qt開發(fā)之使用QUdpSocket實現UDP網絡通信

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文主要介紹如何運用QUdpSocket組件實現基于UDP的網絡通信功能,需要的可以參考下
    2024-03-03
  • C++類型轉換詳解

    C++類型轉換詳解

    類型轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(TYPE)EXPRESSION,但是c風格的類型轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意類型之間轉換
    2021-10-10
  • C++實現學校運動會管理系統(tǒng)

    C++實現學校運動會管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現學校運動會管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 利用C++模擬實現STL容器:list

    利用C++模擬實現STL容器:list

    列表是一種順序容器,它允許在序列中的任何位置執(zhí)行常量時間插入和刪除操作,并允許在兩個方向上進行迭代。本文將利用C++模擬實現list,希望對大家有所幫助
    2022-12-12
  • C++?Boost?Conversion超詳細講解

    C++?Boost?Conversion超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11

最新評論