Qt通过post请求发送和拆分json数据(二)———附送完整源代码

网友投稿 322 2022-11-18

Qt通过post请求发送和拆分json数据(二)———附送完整源代码

文章目录

​​0 背景​​​​1 发送json格式的数据​​

​​1.1 进行post请求的类:​​​​1.1 使用post请求类​​

​​2 发送json数据​​​​3 解析json数据​​​​4 附赠​​

0 背景

1 发送json格式的数据

1.1 进行post请求的类:

在pro文件中,加入

QT += network # 网络

.h

#ifndef HTTPNETWORKREQUEST_H#define HTTPNETWORKREQUEST_H#include#include#include#include#include#includeclass HttpNetworkRequest : public QObject{ Q_OBJECTpublic: HttpNetworkRequest(); ~HttpNetworkRequest();private: //执行的post类型 int m_executePostRequestType = 0; //解析的post类型 int m_analysisPostRequestType = 0;private: //post请求状态 enum PostStatus{ SucceedDeal = 0,//成功处理 ServerMaintenanceError = 1,//服务器维护状态 SeverDisconnectError = 2,//断网状态 NoPermissionError = 3,//没有权限 DataAbnormalError = 4,//json数据异常错误 DealDatabaseError = 5//处理数据库异常错误 }; //请求的ip头 QString m_requestIPHead = " //解析的post类型 enum AnalysisPostType{ TestRequest = 0,//工作模式 }; //执行的post类型 enum ExecutePostType{ TestOperate = 0,//进货操作 }; //得到消息头的token QString m_accessToken; //发送网络请求和接受应答 QNetworkAccessManager* m_networkAccessManager; //请求的消息题 QNetworkRequest m_ //发送data数据 QByteArray m_sendJsonData; /**************请求**********************/ /** * @brief 测试test的post请求 */ void testHttpRequestPost(); /**************处理**********************/ /** * @brief 处理服务器状态请求 * @param jsonObject */ bool dealTestRequest(QJsonObject& jsonObject);private slots: /** * @brief 处理post请求发回的数据的总接口 * @param reply */ void dealNetworkFinisheded(QNetworkReply *reply);//调用唯一接口public slots: /** * @brief 接收请求操作的post类型 */ void receivePostRequestType(int instruct, const QByteArray& content = "");signals: /** * @brief 处理数据的结果 * @param type:界面类型 * 处理回传参数post,各种异常 */ void sendDealDataResult(int result, int type);};#endif // HTTPNETWORKREQUEST_H

.cpp

#include " receivePostRequestType(接收执行消息类型)-->workModeQueryRequestPost(进行工作状态查询)【sendServerMaintainStatus信号】 --->accessTokenHttpRequestPost--->dealTokenReques(根据m_executePostRequestType类型不同,执行不同业务操作)*/HttpNetworkRequest::HttpNetworkRequest(){ m_networkAccessManager = new QNetworkAccessManager(); //处理所有post请求 connect(m_networkAccessManager, &QNetworkAccessManager::finished, this, &HttpNetworkRequest::dealNetworkFinisheded);}HttpNetworkRequest::~HttpNetworkRequest(){ qDebug()<<"HttpNetworkRequest"; delete m_networkAccessManager;}//发送post请求void HttpNetworkRequest::testHttpRequestPost(){ qDebug()<<"testHttpRequestPost";// QJsonObject obj;// obj.insert("accountId", "1");// QJsonDocument jsonDoc(obj);//QJsonObject转QJsonDocument// QString str = QString(jsonDoc.toJson());//QJsonDocument转QString// QByteArray content = str.toUtf8();// int contentLength = content.length(); m_+ "/api/clientversion/client/working/mode/query")); m_"application/json"); m_m_accessToken.toUtf8()); m_m_sendJsonData.length()); m_analysisPostRequestType = AnalysisPostType::TestRequest; // 发送参数// 将用户名和密码发送至web服务器进行验证 m_networkAccessManager->post(m_m_sendJsonData);}//处理post请求bool HttpNetworkRequest::dealTestRequest(QJsonObject &jsonObject){ qDebug()<<"dealTestRequest:"<readAll();//读取全部数据 QJsonParseError jsonError; QJsonDocument document = QJsonDocument::fromJson(data.toByteArray(), &jsonError); if (!document.isNull() && (jsonError.error == QJsonParseError::NoError)) { qDebug()<<"解析未发生错误"; qDebug()<<"JSON 文档为对象"; QJsonObject object = document.object(); // 转化为对象 if (document.isObject()) { switch (m_analysisPostRequestType) { case AnalysisPostType::TestRequest: dealTestRequest(object); break; default: break; } }else{ emit sendDealDataResult(PostStatus::DealDatabaseError, m_executePostRequestType); } }else{ if(document.isNull() == true){ qDebug()<<"document.isNull:" + reply->errorString(); emit sendDealDataResult(PostStatus::SeverDisconnectError, m_executePostRequestType); }else if(jsonError.error == QJsonParseError::NoError){ qDebug()<<"jsonError.error:" + reply->errorString(); emit sendDealDataResult(PostStatus::SeverDisconnectError, m_executePostRequestType); } } //删除对象 reply->deleteLater();}//类接口void HttpNetworkRequest::receivePostRequestType(int instruct, const QByteArray& content){ //获得执行的指令 m_executePostRequestType = instruct; //获得发送的内容 m_sendJsonData = content; switch (m_executePostRequestType) { case ExecutePostType::TestOperate: testHttpRequestPost(); break; default: break; }}

1.1 使用post请求类

在类中加入post请求的成员:

#ifndef MAININTERFACE_H#define MAININTERFACE_H#include #include"Ui { class MainInterface; }QT_END_NAMESPACEclass MainInterface : public QMainWindow{ Q_OBJECTpublic: MainInterface(QWidget *parent = nullptr); ~MainInterface();private: Ui::MainInterface *ui;private: //执行的post类型 enum ExecutePostType{ TestOperate = 0,//进货操作 }; //post请求 HttpNetworkRequest* m_ /** * @brief testPost:调用post方法 */ void testPost();};#endif // MAININTERFACE_H

.cpp

调用方法:

#include "maininterface.h"#include "ui_maininterface.h"#includeMainInterface::MainInterface(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainInterface){ ui->setupUi(this); //创建对象 m_= new HttpNetworkRequest; testPost();}MainInterface::~MainInterface(){ //销毁对象 delete m_ delete ui;}//发送post请求void MainInterface::testPost(){ //要发送的json数据 QJsonObject obj; obj.insert("accountId", "1"); QJsonDocument jsonDoc(obj);//QJsonObject转QJsonDocument QString str = QString(jsonDoc.toJson());//QJsonDocument转QString QByteArray content = str.toUtf8(); //发送post请求 m_content);}

2 发送json数据

方法:

//要发送的json数据 QJsonObject sendJsonData; sendJsonData.insert("code", 200); //加入array QJsonArray arry; QJsonObject tempObject1; tempObject1.insert("name", "小明"); tempObject1.insert("height", 180); tempObject1.insert("weight", 70.3); arry.append(tempObject1); QJsonObject tempObject2; tempObject2.insert("name", "小花"); tempObject2.insert("height", 165); tempObject2.insert("weight", 45.8); arry.append(tempObject2); sendJsonData.insert("people", QJsonValue(arry)); //加入object QJsonObject tempObject; tempObject.insert("school", "Carnegie Mellon University"); tempObject.insert("location", "PIT"); sendJsonData.insert("affiliation", QJsonValue(tempObject)); m_jsonData = sendJsonData;//m_jsonData为类成员变量,类型为QJsonObject qDebug()<<"sendJsonData:"<

处理post返回的结果:

//处理post返回的结果 connect(m_&HttpNetworkRequest::sendDealDataResult, this, [&](int result, int type){ });

3 解析json数据

例如解析上面的示例中的json数据:

//解析code if(m_jsonData.contains("code")){ qDebug()<<"code:"<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实战之邮件的撰写和发送
下一篇:上位机下位机串口通信设计详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~