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/n/145388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UJHXUJHX
上一篇 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

发表回复

登录后才能评论