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


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

查看所有标签

猜你喜欢:

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

神经网络在应用科学和工程中的应用

神经网络在应用科学和工程中的应用

萨马拉辛荷 / 2010-1 / 88.00元

《神经网络在应用科学与工程中的应用:从基本原理到复杂的模式识别》为读者提供了神经网络方面简单但却系统的介绍。 《神经网络在应用科学和工程中的应用从基本原理到复杂的模式识别》以神经网络在科学数据分析中所扮演角色的介绍性讨论作为开始,给出了神经网络的基本概念。《神经网络在应用科学和工程中的应用从基本原理到复杂的模式识别》首先对用于实际数据分析的神经网络结构进行了综合概述,继而对线性网络进行了大量......一起来看看 《神经网络在应用科学和工程中的应用》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具