c语言sscanf函数的用法是什么
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:"<
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~