Qt项目天气预报(4) - json 数据解析

QT天气预报 项目介绍 本项目基于QT平台开发的一款天气预报的应用,效果图如下: 1、 有城市的天气预报,有背景图、控件半透明化。 2、 显示日期,城市名称,当天的天气预报 3、 当天天气预报的详细数据 4、 该天的一些生活指数:如感冒指数、每日寄语 5、 当天的日出日落时间,及扇形时间占比 6、 该城市,前一后四天的天气预报,含有日期,星期,天气,高低温 7、 最近一周的温湿度曲线 8、 搜索框、刷新按钮。 9、 窗口大小固定,无最大、最小化、关闭按钮。鼠标拖动窗口移动,右键退出。 10、自定义按钮图标 实现思路 阅读详情

  QT的json基本概念

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,尽管它是独立于语言的,且有多种语言支持。JSON常用于网络应用程序中的数据传输,尤其是在Web应用程序中与后端服务器通信。

在Qt中生成JSON数据并将其保存到文件的一个基本示例涉及使用 QJsonDocument 、QJsonObject 和QJsonArray 类。以下是创建一个简单JSON对象并将其保存到文件的示例代码。

Qt 输出生成json文件

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QJsonObject rootObj;
    //配置简单的json数据:
    rootObj["cityid"] = "101050101";
    rootObj["date"] = "2024-06-16";
    rootObj["week"] = "星期日";
    rootObj["tmp"] = "255";

    //创建并实例化json数组
    QJsonArray jsonArray;
    jsonArray.append("data1");
    jsonArray.append("data2");
    jsonArray.append("data3");
    jsonArray.append(100);

    //将json组作为一组值对象,赋值给一个键
    rootObj["testArry"] = jsonArray;


    //QJsonObject 对象也能加入数组
    QJsonObject alarmObj;
    alarmObj["alarmType"] = "雪灾";
    alarmObj["alarmLeve"] = "黄色";
    alarmObj["alarmTitle"] = "哈尔滨雪灾险情,请注意安全";

    rootObj["alarm"] = alarmObj;

     //多层数组嵌套

     QJsonObject day0;
     day0["day"] = "星期一";
     day0["wea"] = "晴";
     day0["tem"] = 20;

     QJsonObject day1;
     day1["day"] = "星期二";
     day1["wea"] = "阴";
     day1["tem"] = 12;

     QJsonObject day2;
     day2["day"] = "星期三";
     day2["wea"] = "雨";
     day2["tem"] = 9;

     QJsonArray dayArray;
     dayArray.append(day0);
     dayArray.append(day1);
     dayArray.append(day2);

     rootObj["days"] = dayArray;



   // 通过QJsonDocument类把JSON类型的数据转为QByteArray
    QJsonDocument jsonDoc(rootObj);
    QByteArray jsonArry =  jsonDoc.toJson();





    QFile file("F:/myqt/file_of_qt/test.json");
    file.open(QIODevice::WriteOnly);
    file.write(jsonArry); // 将QByteArray中的数据写入中文件
    file.close();

}

Widget::~Widget()
{
    delete ui;
}

效果演示

解析json数据

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
#include <QJsonArray>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 读取JSON文件保存到QByteArray中
    QFile file("F:/myqt/file_of_qt/test.json");
    file.open(QIODevice::ReadOnly);
    QByteArray rawData = file.readAll(); // 将QByteArray中的数据写入中文件
    file.close();

    // 成绩单JsonObeject对象, 通过下标(键匹配)访问解析,解析出json文件数据
    QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
    if(!jsonDoc.isNull() && jsonDoc.isObject()){
        QJsonObject jsonRoot = jsonDoc.object();
        QString strW =jsonRoot["week"].toString();
        QString strT =jsonRoot["tmp"].toString();
        QString strDA =jsonRoot["date"].toString();

        QString strCT =jsonRoot["cityid"].toString();

        qDebug()<<strW;
        qDebug()<<strT; //这里tmp定义的数字是QString类型
        //qDebug()<<QString::number(strT); //qDebug() 默认输出QString类型需要转化
        qDebug()<<strCT;
        qDebug()<<strDA;

        // 解析QJsonArray
        if(jsonRoot.contains("testArry") && jsonRoot["testArry"].isArray())
        {
            qDebug()<<"arry";
            QJsonArray testArry = jsonRoot["testArry"].toArray();

            for(QJsonValue val : testArry){
                // 根据类型进行转换
                switch (val.type()) {
                case QJsonValue::Double:
                    qDebug()<<QString::number(val.toDouble());
                    break;
                case QJsonValue::String:
                    qDebug()<<val.toString();
                    break;
                case QJsonValue::Object:
                    break;
                }
            }
        }
        //解析QJsonObeject对象

        if(jsonRoot.contains("alarm") && jsonRoot["alarm"].isObject()){

        QJsonObject alarmObj = jsonRoot["alarm"].toObject();
        qDebug()<< alarmObj["alarmLeve"].toString();
        qDebug()<< alarmObj["alarmTitle"].toString();
        qDebug()<< alarmObj["alarmType"].toString();
        }
        //解析包含QJsonObject对象的 QJsonArray
        if(jsonRoot.contains("days") && jsonRoot["days"].isArray()){
         QJsonArray dataArray = jsonRoot["days"].toArray();
            for(QJsonValue val:dataArray){
           //if(val.type() == QJsonValue::Object){
           if(val.isObject()){

             QJsonObject obj = val.toObject();
             qDebug()<<obj["day"].toString();
             qDebug()<<QString::number(obj["tem"].toDouble());
             qDebug()<<obj["wea"].toString();

             }
            }
        }


    }

}

Widget::~Widget()
{
    delete ui;
}

效果演示

如上图所有的json数据我们都已经解析出来了

【QT学习笔记】基于QT的天气预报 【QT学习笔记】基于QT的天气预报前言那就开始吧!先看一下效果颜面最重要,画个UI构造实现怎么开始?开始解析数据关于城市切换ok感谢 前言 学习qt已经有一段时间了,做的都是一些单机类的小软件。突然有了兴致,做了这个能联网的软件,天气预报软件。 网络上有很多免费的天气api,有 xml 格式,也有 json 格式的。具体 xml 和 json 有什么区别,这里不做解释,本文所使用天气接口返回的是 ... 阅读详情

相关推荐

【QT项目-天气预报】

/ 重写父类的eventFilter的方法// 绘制高低温曲线// 绘制高温曲线// 绘制低温曲线使用方法将当前窗口对象MainWindow作为事件过滤器安装到和上。方法是QObject类的方法,用于安装一个事件过滤器。事件过滤器可以监视和处理指定对象的事件。通过将当前窗口对象作为事件过滤器安装到和上,可以在MainWindow类中的eventFilter方法中对这两个对象的事件进行处理。//参数指定为this,也就是当前窗口对象 MainWindow。

weixin_45065072的博客 1896

QT4 使用QJson

QT4没有自带Json处理的库,使用开源的QJson库,本文介绍了QJson 的编译安装使用。

LUCYcanFire的博客 3591

Qt实现简易天气预报(解析的是json数据)

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow

Phr_Nick的博客 3508

【C++ qt4】操作json学习笔记

本博文源于笔者在学习c++ qt4操作json文件,qt4不支持json,里面的函数是json.h与jsoncpp.cpp我已经附在文末,大家可复制重命名用,里面的案例可以自己拿来敲或者直接copy也行.,一定利用好目录拖动,不然很长。

执念斩长河 1676

Qt天气预报项目

使用qt6 cmake实现的天气预报项目。主要功能: 实时展示城市的基本天气情况,包括温度、风向、空气质量等, 不同的天气情况和空气质量显示不同的图标和背景色, 展示未来天气状况并绘制温度折线图, 可以根据输入的城市名切换城市, 隐藏边框,窗口随鼠标拖拽而移动。

2301_82023822的博客 1742

【C++ QT项目5】——基于HTTP与JSON数据流的天气预报界面设计

设计一个天气预报界面,实现对不同城市区域的天气获取与显示,其中主要涉及stylesheet界面美化、HTTP通信、JSON数据解析自定义控件绘制温度多控件及其最终代码整合调试能力。

weixin_46216674的博客 1925

在Qt中实现关于Json 的操作

qt中实现json的一些相关操作,主要用到qt中的五个类:QJsonValue、QJsonArray、QJsonObject、QJ'sonDOcument、QJsonParseError

My_class2233的博客 4921

QT项目——天气预报

本项目主要涉及 Qt 界面设计、HTTP 通信、JSON 数据解析、自定义控件绘制温湿度曲线、Qt 信号与槽等的应用,通过调用天气预报API解析 JSON 数据获取未来七天的温湿度、风力强度、天气状态等信息,最后显示在Qt UI界面。

wei_Embedded_z的博客 2167

Qt JSON详解二

JSON( JavaScript Object Notation,对象表示法) 是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集。许多编程语言都很容易找到J SON 解析器和 JSON 库。JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。不同语言的不同 json 库对 JSON 标准的支持不尽相同,为了能让尽可能多的 JSON 库都能正常解析和生成 JSON ,定义 JSON 的规范很重要,推荐一个 JSON 规范《Google - JSON风格指南。

m0_73482095的博客 1015

Qt4实现json文件的读取和显示

QT4不支持JSON格式,QT5自带了库,所以QT4需要引入第三方,这里使用的是Eeli Reilin的QtJson。本资源是对json库的实现案例,适合学习和理解json库的qt读写使用。

Qt4 Json 解析和编码类,支持中文 2012.11.05

Qt4 中使用的 json 类。很好用。

Qt之JSON

简述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于 JavaScript Programming Language、Standard ECMA-262 3rd Edition - December 1999 的一个子集。JSON 采用完全...

weixin_33797791的博客 507

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

zerorzeror的博客 3117

基于QT天气预报项目,推荐初学者练手

本项目基于QT平台开发的一款七天天气预报,一个适合小白练手的项目。

qq_51163115的博客 9777

飞思卡尔16位单片机(二)——CodeWarrior开发环境搭建及新建、调试工程

一、安装CodeWarrior 飞思卡尔16位单片机的开发环境为CodeWarrior5.1,这个软件安装比较简单,软件的安装文件可以从相应的网站上下载。安装CodeWarrior所需要的电脑的硬件资源也比较宽泛,目前一般的电脑都可以满足这个要求,可以支持win10、win7等操作系统。安装过程按照按照软件的提示一步步操作即可。 二、安装USBDM驱动 USBDM是...

bigmarshal的博客 1万+

Inside NAND Flash Memories.中文版. Chatper 2 [2.1-2.2.1]

2.1 Introduction 半导体存储器分类: RAM:Random Access Memories--掉电丢失 ROM:Read Only Memories--只读,出厂时写好;掉电不丢失;不可更改。 NVM:Non-Volatile Memories--电可擦除/写入,并且掉电不丢失。第一类产品为EPROM memory (Erasable Programmable Read...

xuqikang的专栏 3606

【QT】QT中http协议和json数据的解析-http获取天气预报

地址: http://t.weather.itboy.net/api/weather/city/xxxxx ,其中xxxxx即为城市代码(数组:用[]来表示,数组里面只能存放相同类型的数据 [1,2,3] [{},{},{}] [键值对,键值对,键值对]json数据:一种数据格式,在计算机前端开发中经常使用这个格式的数据,保存信息很方便。键值对:用键:值表示, 键只能是字符串,值可以是任意合法类型。json数据只能由数组,对象,键值对三种构成。对象:用{}来表示,可以嵌套 {键值对}

qq_62917398的博客 1452

使用GitLab+Drone CI持续集成自动部署web项目,图文详细

kind: pipeline # 定义对象类型,还有secret和signature两种类型 type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型 name: mall-tiny-drone # 定义流水线名称 steps: # 定义流水线执行步骤,这些步骤将顺序执行 - name: package # 流水线名称 image: maven:3-jdk-8 # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库

4105

Qt——天气预报项目

1.窗口1:使用水平布局,内包含俩个QLabel类和一个QLineEdit类这里可以设置LineEdit中的提示文字 2.窗口2:使用栅格布局,这个天气图标组件的大小需限制一下 3.窗口3:里面包含一个子窗口,设置子窗口背景样式为橘色子窗口中的组件先垂直布局,后水平布局。最后整体再来一个栅格布局4.窗口4:里面包含6个子窗口。子窗口0401、0402、0406都需要进行栅格布局子窗口0401和0406中的组件是由俩个QLabel类拼接在一起的。 5.最后给4个窗口整体进行垂直布局即可解决方法:重写鼠标点击事

m0_73510889的博客 1543

termux 安装 rockylinux

往找最新的文件目录,选择ARM版本的image。或者直接查看目录或者国内阿里云镜像,按照cpu架构(安卓9手机一般是aarch64arm最新架构),获取镜像地址,以及checksum里的SHA256信息更新到以下rocky9.sh脚本,如果不需要直接使用即可。

欢迎来到别往的博客 984

Camera metadata

Camera metadata

weixin_42136255的博客 2529

Qt项目——天气预报

通过对之前Qt的学习其实我们就已经有一点经验了,做天气预报只需要了解以下内容:stylesheet界面美化Json数据解析HTTP通信自定义控件绘制温度能讲的不重复的也基本上没什么了,其实明白它整个框架,会用常用的控件,不会的就是查手册或者上网查资料 ,剩下的就是多练了,看着代码多敲多写。!!

ycs66的博客 1016

nicegui 可视化扩展库

总体来说,这段代码使用nicegui库创建了一个具有一些基本UI元素的界面,并使用扩展库来实现更多的布局功能。这段代码使用了nicegui库创建了一个UI界面。函数导入了一个扩展库,用于实现更多的布局功能。然后又使用了一个行布局,并添加了两个按钮(在UI界面中,使用了一个卡片(在行布局中依次添加了一个标签(在卡片中使用了一个头像(接下来使用了一个行布局(设置了背景颜色为绿色。设置了居中对齐和红色。设置了间距和字体大小。设置了居中对齐和样式。设置了按钮的对齐方式。

东方佑 1020

基于Qt4的天气预报

基于Qt4的天气预报 前言 最近笔者想用Qt来实现一个简单的天气预报功能,虽然现在早已流行使用Qt5以上版本来做设计并且网络上也有非常多基于Qt5来实现天气预报的案例,但是对于很多初学者依然会使用Qt4来学习,因此笔者来分享一个基于Qt4实现的案例,希望对大家有所帮助。 一、效果展示 二、遇到的几个问题 2.1 Json数据解析 当我们通过网络使用中国天气网API接口:http://wthrcd...

qq_44665944的博客 964

FAST-LIVO2 源码精读(五):IMU 运动模型、离散传播与去畸变原理

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第五篇,数学基础篇章(第 4–7 篇)的第二篇。上一篇在 SO(3) 流形上建立了姿态表示与右扰动模型;本篇聚焦 IMU 预积分的核心问题:一帧激光扫描横跨约 100 ms,帧内每一个点的采集时刻各不相同,如何利用 200 Hz 的 IMU 量测将全帧点云统一对齐到帧末时刻?答案完整封装在(587 行)的函数中,本篇逐段拆解其四阶段逻辑,并推导协方差矩阵随误差状态转移矩阵F_x逐帧演化的物理含义。

PX4-SLAM-PNC 158

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

QT项目—天气预报

qt天气项目

qq_52201535的博客 5387

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 一文带你了解CAN协议 - 趋于完美的通信协议
下一篇: Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值