Qt Socket Server 收发JSON

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

内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点点击下文末的广告,感谢~之前文章写过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开发王

JavaScript开发王

张亚飞 / 2008-6 / 65.00元

《网站开发专家·JavaScript开发王》详细介绍使用JavaScript脚本开发应用程序,并融合在网页中实现动态网页,内容也包含DHTML和AJAX。这《网站开发专家·JavaScript开发王》有严格的逻辑性,不论是JavaScript语言、DHTML,还是AJAX,《网站开发专家·JavaScript开发王》首先帮助用户建立首要的、基础的正确认知,然后通过实例,说明如何利用JavaScri......一起来看看 《JavaScript开发王》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具