Qt解析JSON

一、Qt解析JSON數據

//JSON數據
{
    "name":"Alice",
    "age":18,
    "hobby":["reading","painting"]
}

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析一段JSON數據,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。

二、Qt解析JSONObject無輸出

//JSON數據
{
    "name":"Alice",
    "info":{
        "age":18,
        "hobby":["reading","painting"]
    }
}

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
QJsonObject infoObj = jsonObj.value("info").toObject();
int age = infoObj.value("age").toInt();
QJsonArray hobbyArr = infoObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析一個包含JSONObject的JSON數據。如果jsonObj.value(“info”)沒有轉成一個對象,則原因是JSON數據格式的問題或者轉換過程出現異常導致的。

三、Qt解析JSON文件

//JSON數據,保存在example.json文件中
{
    "name":"Alice",
    "age":18,
    "hobby":["reading","painting"]
}

//Qt代碼
QFile file("example.json");
if(!file.open(QIODevice::ReadOnly))
{
    qDebug()<<"打開文件失敗";
    return;
}
QByteArray jsonData = file.readAll();
file.close();
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析example.json文件中的JSON數據,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。

四、Qt解析JSONArray

//JSON數據
["reading","painting"]

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isArray())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonArray hobbyArr = jsonDoc.array();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析一個JSONArray,並輸出其中的數據到控制台。

五、Qt解析JSON字元串

//JSON字元串
QString strJson = "{\"name\":\"Alice\",\"age\":18,\"hobby\":[\"reading\",\"painting\"]}";

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(strJson.toUtf8());
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
int age = jsonObj.value("age").toInt();
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析一個JSON字元串,並從中獲取名字、年齡和愛好信息,並輸出到控制台上。

六、Qt解析JSON沒有輸出

//JSON數據
{
    "name":"Alice",
    "score": {
        "Math": 90,
        "English": 80
    },
    "hobby":["reading","painting"]
}

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
qDebug()<<name;
int mathScore = jsonObj.value("score").toObject().value("Math").toInt();
qDebug()<<"Math Score:"<<mathScore;
int englishScore = jsonObj.value("score").toObject().value("English").toInt();
qDebug()<<"English Score:"<<englishScore;
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

以上代碼通過Qt解析一個包含嵌套JSONObject的JSON數據,如果沒有值輸出,那麼原因有二:jsonObj.value(“score”)沒有轉成一個對象、JSON數據格式的問題。

七、Qt解析JSONList

在Qt中解析JSONList需要首先引入第三方庫QJsonArray,下面是對JSONList的解析示例。

//JSON數據
[
    {
        "name":"Alice",
        "age":18
    },
    {
        "name":"Bob",
        "age":22
    }
]

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isArray())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonArray jsonArray = jsonDoc.array();
foreach(QJsonValue val , jsonArray)
{
    QJsonObject jsonObj = val.toObject();
    QString name = jsonObj.value("name").toString();
    int age = jsonObj.value("age").toInt();
    qDebug()<<name<<age;
}

八、Qt解析JSONArray需要三方庫嗎

Qt自帶的QJsonDocument、QJsonObject、QJsonArray類可以解析任何合法的JSON數據,不需要引入其他第三方庫。

九、Qt解析JSONObject輸出為空

//JSON數據
{
    "name":"Alice",
    "score": {
        "Math": 90,
        "English": 80
    },
    "hobby":["reading","painting"]
}

//Qt代碼
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if(jsonDoc.isNull() || !jsonDoc.isObject())
{
    qDebug()<<"JSON數據格式錯誤";
    return;
}
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj.value("name").toString();
qDebug()<<name;
QJsonValue scoreVal = jsonObj.value("score");
if(scoreVal.isNull() || !scoreVal.isObject())
{
    qDebug()<<"Score數據格式錯誤";
    return;
}
QJsonObject scoreObj = scoreVal.toObject();
int mathScore = scoreObj.value("Math").toInt();
qDebug()<<"Math Score:"<<mathScore;
int englishScore = scoreObj.value("English").toInt();
qDebug()<<"English Score:"<<englishScore;
QJsonArray hobbyArr = jsonObj.value("hobby").toArray();
foreach(QJsonValue val , hobbyArr)
{
    QString hobby = val.toString();
    qDebug()<<hobby;
}

如果JSON對象中某一個值為null或者值類型不匹配,則原因可能是JSON數據格式的問題或者轉換過程中出現異常導致的。

原創文章,作者:UJHX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145388.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UJHX的頭像UJHX
上一篇 2024-10-27 23:49
下一篇 2024-10-27 23:49

相關推薦

  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分散式文件系統(HDFS)。HDFS是一個可擴展性高的分散式…

    編程 2025-04-29
  • 如何使用Newtonsoft datatable轉Json

    Newtonsoft DataTable 是一個基於.NET的JSON框架,也是一個用於序列化和反序列化JSON的強大工具。 在本文中,我們將學習如何使用Newtonsoft Da…

    編程 2025-04-28
  • JPRC – 輕鬆創建可讀性強的 JSON API

    本文將介紹一個全新的 JSON API 框架 JPRC,通過該框架,您可以輕鬆創建可讀性強的 JSON API,提高您的項目開發效率和代碼可維護性。接下來將從以下幾個方面對 JPR…

    編程 2025-04-27
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • Python存為JSON的方法及實例

    本文將從以下多個方面對Python存為JSON做詳細的闡述。 一、JSON簡介 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱…

    編程 2025-04-27
  • 使用Python獲取JSON並解析

    本文將介紹如何使用Python獲取JSON數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

    編程 2025-04-27
  • 使用Spread 8展示JSON數據

    使用Spread 8可以方便地展示JSON數據,本文將詳細介紹如何利用Spread 8展示JSON數據。 一、Spread 8簡介 Spread 8是一款強大的電子表格軟體,可以方…

    編程 2025-04-27
  • Python中的Qt庫

    Qt庫是一個跨平台的C++圖形用戶界面(GUI)工具包。它提供了豐富的界面控制項和處理系統事件的功能,可以輕鬆創建交互界面、圖形化應用和多媒體應用。而Python中的Qt庫則是Qt的…

    編程 2025-04-27

發表回復

登錄後才能評論