首页 > 其他分享 >Qt构建与解析Json示例

Qt构建与解析Json示例

时间:2024-11-11 23:09:49浏览次数:1  
标签:insert captical Qt 示例 rootObject Json infoObject include name

本文以B站UP主“明王讲QT”的【QT开发专题-天气预报】中的章节内容作为学习Qt中构建、解析Json的参考方法。

1、Json文本

{
    "info": {
        "asian": true,
        "captical": "beijing",
        "founded": 1949
    },
    "name": "China",
    "provinces": [
        {
            "captical": "jinan",
            "name": "shandong"
        },
        {
            "captical": "hangzhou",
            "name": "zhejiang"
        }
    ]
}

2、构建、解析代码

#include <QtCore/QCoreApplication>
#include <QDir>
#include <QFile>

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>

void writeJson()
{
    QJsonObject rootObject;

    //1.插入name字段
    rootObject.insert("name", "China");

    //2.插入info字段
    QJsonObject infoObject;
    infoObject.insert("captical", "beijing");
    infoObject.insert("asian", true);
    infoObject.insert("founded", 1949);

    rootObject.insert("info", infoObject);

    //3.插入provinces字段
    QJsonArray provinceArray;

    //山东
    QJsonObject provinceSdObject;
    provinceSdObject.insert("name", "shandong");
    provinceSdObject.insert("captical", "jinan");

    //浙江
    QJsonObject provinceZjObject;
    provinceZjObject.insert("name", "zhejiang");
    provinceZjObject.insert("captical", "hangzhou");

    provinceArray.append(provinceSdObject);
    provinceArray.append(provinceZjObject);

    rootObject.insert("provinces", provinceArray);

    //4.将rootObject转换为字符串
    QJsonDocument doc(rootObject);
    QByteArray json = doc.toJson();

    //打印输出
    qDebug() << QString(json).toUtf8().data();

    //5.将json字符串写入文件
    QString dirPath = QCoreApplication::applicationDirPath();
    QString path = QDir::cleanPath(dirPath + QDir::separator() + "china.json");
    QFile file(path);
    file.open(QFile::WriteOnly);
    file.write(json);
    file.close();
}

void readJson()
{
    //1.从文件读取json字符串
    QString dirPath = QCoreApplication::applicationDirPath();
    QString path = QDir::cleanPath(dirPath + QDir::separator() + "china.json");
    QFile file(path);
    file.open(QFile::ReadOnly);
    QByteArray json = file.readAll();
    file.close();

    //2.解析json字符串
    QJsonDocument doc = QJsonDocument::fromJson(json);
    if (!doc.isObject())
    {
        qDebug() << "Not an object";
        return;
    }

    QJsonObject rootObject = doc.object();
    QStringList keys = rootObject.keys();
    for (int i=0; i<keys.size(); i++)
    {
        QString key = keys[i];
        QJsonValue value = rootObject.value(key);

        if (value.isBool())
        {
            qDebug() << key << ":" << value.toBool();
        }
        else if (value.isString())
        {
            qDebug() << key << ":" << value.toString();
        }
        else if (value.isDouble())
        {
            qDebug() << key << ":" << value.toDouble();
        }
        else if (value.isObject())
        {
            qDebug() << key << ":";

            QJsonObject infoObject = value.toObject();
            QString captical = infoObject["captical"].toString();
            bool asian = infoObject["asian"].toBool();
            int founded = infoObject["founded"].toInt();

            qDebug() << "    captical: " << captical;
            qDebug() << "    asian: " << asian;
            qDebug() << "    founded: " << founded;
        }
        else if (value.isArray())
        {
            qDebug() << key << ":";

            QJsonArray provinceArray = value.toArray();
            for (int i=0; i<provinceArray.size(); i++)
            {
                QJsonObject provinceObject = provinceArray[i].toObject();
                QString name = provinceObject["name"].toString();
                QString captical = provinceObject["captical"].toString();

                qDebug() << "    name: " << name << ", captical: " << captical;
            }
        }
    }
}

标签:insert,captical,Qt,示例,rootObject,Json,infoObject,include,name
From: https://www.cnblogs.com/xhubobo/p/18540774

相关文章

  • Qt读写文件简单示例
    voidtestReadWriteFile(){//当前程序所在文件夹QStringdirPath=QCoreApplication::applicationDirPath();QStringpath=QDir::cleanPath(dirPath+QDir::separator()+"test.txt");qDebug()<<"Filepath:"<<path;......
  • System.Text.Json官方文档(链接)
    下面的微软官方文档中介绍了,如何使用System.Text.Json来序列化和反序列化JSON:JSONserializationanddeserialization其中这里讲解了如何避免循环引用序列化:HowtopreservereferencesandhandleorignorecircularreferencesinSystem.Text.Json其中下面的章节还介绍了......
  • 【MQTT】代理服务比较RabbitMQ、Mosquitto 和 EMQX
    前言目前要处理大量设备同时频繁发送数据的情况,MQTT协议确实是一个更优的选择,因为它特别适合需要低带宽和高效能的物联网应用,下面是对目前主流协议的对比数据截止日期:2024年11月10日基础设施后端:springcloud项目设备端:IOT设备,每秒上报数据对比项特性RabbitMQMosqui......
  • 零声QT学习 一
    intmain(intargc,char*argv[]){QApplicationa(argc,argv); //QApplicationa(argc,argv),针对QWidget应用程序,管理和设置Qt程序的运行 //QGuiApplicationa(argc,argv),针对非QWidget应用程序,如QQuick //QcoreApplicationa(argc,argv),针对无界面的应用程序......
  • DHCP 和 DNS 示例
    DHCP和DNS示例https://openwrt.org/zh/docs/guide-user/base-system/dhcp_configuration Thisarticlereliesonthefollowing:Accessing webinterface / command-lineinterfaceManaging configs / packages / services / logsSeealso: DH......
  • Qt边推流边录制/实时性好延迟低/16路1080P推流加录制只占1%CPU/优化到极致
    一、前言这个一边推流一边录制的功能,有很多用户提到过,之前因为时间的原因,一直没有搞,年初的时候索性抽空搞了下,也着实费了些功夫。推流用的是ffmpeg这个开源的牛逼的第三方库,搞音视频开发的人应该没人不认识这个库,养活了很多程序员以及厂家,甚至不乏一些大厂,如果能把ffmpeg搞精通,在......
  • appsettings.json launchSettings.json 发布 配置
    默认的 JsonConfigurationProvider 会按以下顺序加载配置:appsettings.jsonappsettings.{Environment}.json:例如,appsettings.Production.json 和 appsettings.Development.json 文件。文件的环境版本是根据 IHostingEnvironment.EnvironmentName 加载的。有关详细信息,......
  • QRust(四)示例程序
    这一章请跟随我对QRust项目携带的demo示例讲解,逐渐熟悉并掌握QRust的使用。无参数、无返回值的示例先从最简单示例foo()开始。Qt端:voidMainWindow::on_btn_foo_clicked(){ui->ptext_out->appendPlainText("-------------foo()-------------");Rustrust("foo")......
  • PHP爬虫快速获取京东商品详情(代码示例)
    在当今互联网时代,数据的重要性不言而喻。对于电商领域来说,获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫,以快速获取京东商品的详情信息。1.概述京东是中国领先的电商平台之一,拥有庞大的商品数据库。通过爬虫技术,我们可以自......
  • qt ui设计案例--登录界面
    登录界面要实现这个界面就非常简单了,准备一张图片就行。lable样式:QLabel{ border-image:url(":/nxd.jpg"); background-position:center; min-width:100px;min-height:100px;border-radius:50px; }搞一个圆背景贴一张图片就行在登录与头像之间随便贴点......