Qt Socket Server 收发JSON

栏目: IT技术 · 发布时间: 4年前

内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点点击下文末的广告,感谢~之前文章写过Linux C Socket 收发重要消息:虽然明天是端午节,但是还是要去公司学习。。。

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点点击下文末的广告,感谢~

之前文章写过Linux C Socket 收发 Json 数据,最近用 Qt Server 实现了一遍。给我自己的感觉就是 cJSON 接口与 Qt 封装的一些接口是共通的: Qt 封装了 QJsonObject 来对 Json 对象操作,如增删改查;封装了 QJsonDocument 来进行一些序列化与反序列化的操作 ( 可能不准确 )

重要消息:虽然明天是端午节,但是还是要去公司学习。。。

后续可能会在公众号中写一点儿理财相关的知识,待定中......

程序中用到了Qt 的 Socket Server ,但主要介绍下 Qt 中如何操作 Json 数据,将接收到的字节流转换为 Json 对象,又如何将 Json 对象转换为字节流。

一、  程序介绍

1. Json 操作相关函数

为了与 C语言 写的对比,同样写了 3 个函数:

Qt :

int ParseRecvJsonData(const QByteArray &recvdata, int *outLogLevel);

int WriteLogLevelToFileJson(const QString &filePathName, const int logLevel);

int CreateRespondInfoJson(QByteArray *respondInfoJson,

const QByteArray &recvJsonData,

const int writeFileRet);

C:

int ParseRecvJsonData(const char * recvdata, int *outLogLevel);

int WriteLogLevelToFileJson(const char *filePathName, int logLevel);

int CreateRespondInfoJson(char *respondInfoJson,

const char* recvJsonData,

const int writeFileRet);

解析Json字节流为 Json 对象,提取所需信息

将所需信息组装成Json对象写入配置文件

将字节流转换为Json对象并添加数据,组装成响应信息

2. Qt 中对 Json 操作的具体实现

直接加注释进行说明

int TcpServerRecvImage::CreateRespondInfoJson(QByteArray *respondInfoJson,

const QByteArray &recvJsonData, const int writeFileRet)

{

//使用QJsonDocument判断字节流能否转成Json对象

QJsonParseError jsonError;

QJsonDocument jsonRecvData(QJsonDocument::fromJson(recvJsonData, &jsonError));


if(jsonError.error != QJsonParseError::NoError)

{

qDebug() << "parse json error!";

return -1;

}

//通过QsonDocument将字节流转为Json对象

QJsonObject rootObject = jsonRecvData.object();

//向Json对象中追加数据

rootObject.insert("Result","FAIL");


if(0 == writeFileRet)

{

//修改对应数据;可以思考下是如何实现修改前与修改后数据所占空间不同

rootObject["Result"] = "SUCCESS";

}

//将Json对象转换为字节流

QJsonDocument documentJson;

documentJson.setObject(rootObject);

QByteArray bytearrayJson = documentJson.toJson();


respondInfoJson->clear();

respondInfoJson->append(bytearrayJson);


return 0;

}


int TcpServerRecvImage::WriteLogLevelToFileJson(const QString &filePathName,

const int logLevel)

{

//Qt文件操作

QFile f(filePathName);

if(!f.open(QIODevice::WriteOnly | QIODevice::Text))

{

qDebug() << "Open failed.";

return -1;

}


// create JSON Object

QJsonObject logLevelJson;

logLevelJson.insert("logLevel",QString::number(logLevel));


QJsonDocument documentJson;

documentJson.setObject(logLevelJson);

QByteArray bytearrayJson = documentJson.toJson();

//使用QTextStream,简化文件操作

QTextStream txtWrite(&f);

txtWrite << bytearrayJson;


f.close();


return 0;

}

3. 程序效果

客户端程序是之前的C语言写的

Qt Socket Server 收发JSON

Qt Socket Server 收发JSON

4.  一点感想

最近一段时间的状态就是不断看书,写Demo程序,并将以前看的一些知识结合起来,不断提炼总结,有一种这就是我想要的生活的错觉;

数据结构如何应用在程序中呢?

应用程序如何变得更强壮呢?

如需完整工程可在公众号后台留言:

Qt Socket Server 收发JSON


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript Web应用开发

JavaScript Web应用开发

[阿根廷] Nicolas Bevacqua / 安道 / 人民邮电出版社 / 2015-9 / 59.00元

本书是面向一线开发人员的一本实用教程,对最新的Web开发技术与程序进行了全面的梳理和总结,为JavaScript开发人员提供了改进Web开发质量和开发流程的最新技术。本书主要分两大块,首先是以构建为目标实现JavaScript驱动开发,其次介绍如何管理应用设计过程中的复杂度,包括模块化、MVC、异步代码流、测试以及API设计原则。一起来看看 《JavaScript Web应用开发》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码