内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点点击下文末的广告,感谢~之前文章写过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语言写的
4. 一点感想
最近一段时间的状态就是不断看书,写Demo程序,并将以前看的一些知识结合起来,不断提炼总结,有一种这就是我想要的生活的错觉;
数据结构如何应用在程序中呢?
应用程序如何变得更强壮呢?
如需完整工程可在公众号后台留言:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用 mutt, msmtp 收发邮件
- ActiveMQ结合Spring收发消息
- 网络通信中收发数据的正确姿势
- Linux 网络层收发包流程及 Netfilter 框架浅析
- Python 比特币教程之二: 机器人收发比特币
- 用SQL查询分析实现类似金蝶K3的收发存明细表
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript Web应用开发
[阿根廷] Nicolas Bevacqua / 安道 / 人民邮电出版社 / 2015-9 / 59.00元
本书是面向一线开发人员的一本实用教程,对最新的Web开发技术与程序进行了全面的梳理和总结,为JavaScript开发人员提供了改进Web开发质量和开发流程的最新技术。本书主要分两大块,首先是以构建为目标实现JavaScript驱动开发,其次介绍如何管理应用设计过程中的复杂度,包括模块化、MVC、异步代码流、测试以及API设计原则。一起来看看 《JavaScript Web应用开发》 这本书的介绍吧!