首页 > 其他分享 >Qt平台下使用QJson 使用

Qt平台下使用QJson 使用

时间:2022-12-14 19:04:32浏览次数:53  
标签:week insert Obj Qt QString 使用 root QJson result


前言

在Qt开发环境下使用Json 的解析和输出当然要使用QJson来完成。
QJson解析JSON 主要使用的类如下

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

QJson 中Json 文件的生成

简单的json生成

,
"Github": "https://github.com/",

"enable": true,
"status": 1,
"update_time": "20221120"
}

代码实现

//一个简单的JSON键值对生成
QString CreateJson::Create_Simple_JSON(void)
{
//创建JSON对象
QJsonObject root_Obj;
//添加键值对,值的类型自动识别,顺序不可自定义

root_Obj.insert("Github", "https://github.com/");

root_Obj.insert("status", 1);
root_Obj.insert("enable", true);
root_Obj.insert("update_time", "20221120");

//创建Json文档
QJsonDocument root_Doc;
root_Doc.setObject(root_Obj);
//QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式
QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式 QString strJson(root_str);
QString strJson(root_str);
qDebug() << strJson;
return strJson;
}

程序效果

Qt平台下使用QJson 使用_qt

json 中嵌套

,
"result": {
"datetime_1": "2022-07-21 10:46:57",
"datetime_2": "2022年07月21日 10时46分57秒",
"timestamp": "ok",
"week_1": "0",
"week_2": "星期日",
"week_3": "周日",
"week_4": "Sunday"
},
"status": "success"
}

代码实现

QString CreateJson::Create_BJTime_JSON(void)
{
QJsonObject result_Obj;
result_Obj.insert("timestamp", "ok");
result_Obj.insert("datetime_1", "2022-07-21 10:46:57");
result_Obj.insert("datetime_2", "2022年07月21日 10时46分57秒");
result_Obj.insert("week_1", "0");
result_Obj.insert("week_2", "星期日");
result_Obj.insert("week_3", "周日");
result_Obj.insert("week_4", "Sunday");

QJsonObject root_Obj;
//添加键值对,值的类型自动识别,顺序不可自定义
root_Obj.insert("status", "success");
root_Obj.insert("Blog"
root_Obj.insert("result", result_Obj);

//创建Json文档
QJsonDocument root_Doc;
root_Doc.setObject(root_Obj);
// QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式
QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式
// qDebug() << root_str; //中文输出乱码
QString strJson(root_str);
qDebug() << strJson;
return root_str;
}

程序效果

Qt平台下使用QJson 使用_qt_02

Json 数组

{
"status": "ok",
"weather": [{
"date": "2022-07-21",
"cond_txt": "多云",
"cond_code": "101",
"hum": "23",
"tmp_H": "31",
"tmp_L": "25"
}, {
"date": "2022-07-22",
"cond_txt": "晴",
"cond_code": "100",
"hum": "20",
"tmp_H": "33",
"tmp_L": "26"
}, {
"date": "2022-07-23",
"cond_txt": "阵雨",
"cond_code": "107",
"hum": "45",
"tmp_H": "32",
"tmp_L": "25"
}],
"update": "2022-07-21 11:00",
"Blog": "www.baidu.com"
}

代码实现

QString CreateJson::Create_Array_JSON(void)
{
QJsonObject day0_Obj;
QJsonObject day1_Obj;
QJsonObject day2_Obj;

day0_Obj.insert("date", "2022-07-21");
day0_Obj.insert("cond_txt", "多云");
day0_Obj.insert("cond_code", "101");
day0_Obj.insert("hum", "23");
day0_Obj.insert("tmp_H", "31");
day0_Obj.insert("tmp_L", "25");

day1_Obj.insert("date", "2022-07-21");
day1_Obj.insert("cond_txt", "阵雨");
day1_Obj.insert("cond_code", "107");
day1_Obj.insert("hum", "44");
day1_Obj.insert("tmp_H", "30");
day1_Obj.insert("tmp_L", "26");

day2_Obj.insert("date", "2022-07-22");
day2_Obj.insert("cond_txt", "晴");
day2_Obj.insert("cond_code", "100");
day2_Obj.insert("hum", "20");
day2_Obj.insert("tmp_H", "33");
day2_Obj.insert("tmp_L", "26");

QJsonArray weather_Arr;
weather_Arr.insert(0, day0_Obj);
weather_Arr.insert(1, day1_Obj);
weather_Arr.insert(2, day2_Obj);

QJsonObject root_Obj;
root_Obj.insert("status", "ok");
root_Obj.insert("update", "2022-07-21 11:00");
root_Obj.insert("Blog", "www.wangchaochao.top");
root_Obj.insert("weather", weather_Arr); //数组作为weather键的值

//创建Json文档
QJsonDocument root_Doc;
root_Doc.setObject(root_Obj);
QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式
// QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式
// qDebug() << root_str; //中文输出乱码
QString strJson(root_str);
qDebug() << strJson;
return strJson;
}

程序效果

Qt平台下使用QJson 使用_qt_03

QJson 格式的解析

格式一

解析的格式如下:

{
"success": "1",
"result": {
"timestamp": "1542456793",
"datetime_1": "2018-11-17 20:13:13",
"datetime_2": "2018年11月17日 20时13分13秒",
"week_1": "6",
"week_2": "星期六",
"week_3": "周六",
"week_4": "Saturday"
}
}

代码实现如下:

QJsonParseError err_rpt;
QJsonDocument root_Doc = QJsonDocument::fromJson(bj_time_json, &err_rpt);//字符串格式化为JSON
if(err_rpt.error != QJsonParseError::NoError)
{
qDebug() << "JSON格式错误";
return -1;
}
else //JSON格式正确
{
// qDebug() << "JSON格式正确:\n" << root_Doc;
QJsonObject root_Obj = root_Doc.object();

QString success = root_Obj.value("success").toString();
/* result键 */
QJsonObject result_Obj = root_Obj.value("result").toObject();
QString datetime_1 = result_Obj.value("datetime_1").toString();
QString datetime_2 = result_Obj.value("datetime_2").toString();
QString timestamp = result_Obj.value("timestamp").toString();
QString week_1 = result_Obj.value("week_1").toString();
QString week_2 = result_Obj.value("week_2").toString();
QString week_3 = result_Obj.value("week_3").toString();
QString week_4 = result_Obj.value("week_4").toString();
qDebug() << datetime_1 << datetime_2;
qDebug() << week_1 << week_2 << week_3 << week_4;
}
return 0;

格式二

{
"status": "0",
"citye": "changchun",
"city": "长春",
"citycode": "101060101",
"aqi": "50",
"data": [{
"add": "长春",
"aqi": "50",
"pm25": "22",
"per": "优",
"lv": "1"
}, {
"add": "食品厂",
"aqi": "54",
"pm25": "18",
"per": "良",
"lv": "2"
}, {
"add": "客车厂",
"aqi": "52",
"pm25": "20",
"per": "良",
"lv": "2"
}, {
"add": "邮电学院",
"aqi": "35",
"pm25": "24",
"per": "优",
"lv": "1"
}, {
"add": "劳动公园",
"aqi": "45",
"pm25": "19",
"per": "优",
"lv": "1"
}, {
"add": "园林处",
"aqi": "45",
"pm25": "21",
"per": "优",
"lv": "1"
}, {
"add": "净月潭",
"aqi": "46",
"pm25": "30",
"per": "优",
"lv": "1"
}, {
"add": "甩湾子",
"aqi": "51",
"pm25": "24",
"per": "良",
"lv": "2"
}, {
"add": "经开区环卫处",
"aqi": "48",
"pm25": "25",
"per": "优",
"lv": "1"
}, {
"add": "高新区管委会",
"aqi": "51",
"pm25": "16",
"per": "良",
"lv": "2"
}, {
"add": "岱山公园",
"aqi": "49",
"pm25": "19",
"per": "优",
"lv": "1"
}]
}

代码实现

int QJsonParse::Parse_AQI_Json(void)
{
QJsonParseError err_rpt;
QJsonDocument root_Doc = QJsonDocument::fromJson(AQI_json, &err_rpt);//字符串格式化为JSON
if(err_rpt.error != QJsonParseError::NoError)
{
qDebug() << "JSON格式错误";
return -1;
}
else //JSON格式正确
{
// qDebug() << "JSON格式正确:\n" << root_Doc;
QJsonObject root_Obj = root_Doc.object();

QString city = root_Obj.value("city").toString();
QString citycode = root_Obj.value("citycode").toString();
QString citye = root_Obj.value("citye").toString();
QString status = root_Obj.value("status").toString();
qDebug() << city + " " + citycode + " " + citye + " " + status;

/* data键 */
QJsonValue data_Vaule = root_Obj.value("data");
if(data_Vaule.isArray())
{
int nsize = data_Vaule.toArray().size();
for(int idx = 0; idx < nsize; idx++)
{
QJsonObject data_Obj = data_Vaule.toArray().at(idx).toObject();
QString add = "地址:" + data_Obj.value("add").toString();
QString aqi = " AQI:" + data_Obj.value("aqi").toString();
QString lv = " 空气质量等级:" + data_Obj.value("lv").toString();
QString per = " 空气质量:" + data_Obj.value("per").toString();
QString pm25 = " PM2.5等级:" + data_Obj.value("pm25").toString();
qDebug() << add + aqi + lv + per + pm25;
}
}
}
return 0;
}

总结

好了,到此就是简单的QJson的 json 文件的解析,以及json格式文件的组装。

标签:week,insert,Obj,Qt,QString,使用,root,QJson,result
From: https://blog.51cto.com/u_15461374/5938259

相关文章

  • 【matlab基础】使用simulink同步CAN数据
    前言最近分析CAN报文数据,不同CAN通道的数据时间和size不一致,使用matlab中的simulink工具实现不同时间戳周期数据的对齐和同步。平常用得少,担心自己忘记了用的时候麻烦别人......
  • 【matlab工具箱使用】matlab工具箱标定相机
    前言印象中之前使用python和matlab都做过相机标定工作,只是没有记录,最近使用matlab工具箱记录下操作步骤。操作步骤1.打印一张棋盘格,把它贴在一个平面上,作为标定物,同时......
  • leaflet 使用kriging-contour.js 与 turf.js生成等值面
    效果如下:leaflet生成等值面网上搜索了好多资料但测试感觉都有点瑕疵,kriging.js 生成的canvas图片每个都是小方格影响美感,turf.js会有非法Polygon且有白色缝隙。就想着可......
  • Docker Compose 使用与安装
    1.安装DockerCompose2.DockerCompose编排nginx+springboot项目 ......
  • qt-信号与槽初步
    接下来,我们将沿着上一篇的进度,学习如何将按钮与退出程序建立连接。建立连接是什么意思呢,我们就拿按钮来解释一下。按钮可以被按下。显然当按钮按下的时候,我们希望程序做出......
  • Gateway服务网关的介绍与使用
    什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需......
  • 使用Power Automate设置定时任务,调用Action
    使用PowerAutomate设置定时任务,调用Action前言使用PowerAutomate设置定时任务,调用的Action是我之前写的那边文章中的Action,附文章:创建自定义Action(全局)1.打开PowerAu......
  • 使用java 实现mqtt两种方式
    前言在开发MQTT时有两种方式一种是使用PahoJava原生库来完成,一种是使用springboot来完成。PahoJava库实现EclipsePahoJavaClient(opensnewwindow)是用Java编......
  • JS使用递归将原始数据转换为树形结构数据
    因为数据库中存放的数据终究全是扁平化的,因此获取后要手动将其改成树形结构,方便el-tree进行渲染。假设数据如下(至少是要有节点ID和父节点ID)   最终要达到如下效果(e......
  • omitjs简单使用
    欢迎关注前端早茶,与广东靓仔携手共同进阶​前端早茶专注前端,一起结伴同行,紧跟业界发展步伐~1、omitjs干什么用的返回一个没有列入排除key属性的对象。其中,参数object为JSON......