QT之QJson传输和中⽂乱码解决⽅案
版权声明:本⽂为博主原创⽂章,转载请注明出处,谢谢⼤家的分享。 blog.csdn/x348722662/article/details/53444294 QT之QJson传输和中⽂乱码解决⽅案
本⽂对遇到QJson的解析和传输遇到的些问题作出⼀些解决的办法
qt中传输json数据
qt接收json数据中包含中⽂转换
qt传输json数据
Qt5中JSON的⽣成与解析
QJsonDocument
QJsonDocument既可以从⼀个基于⽂本表⽰的UTF-8编码,⼜可以从Qt⾃⼰的⼆进制格式读取和写⼊这个⽂件。
JSON⽂档可以从它的基于⽂本的表⽰使⽤QJsonDocument::fromJson()转换为QJsonDocument,⽤.toJS
ON()将其转换回⽂字。
解析器⾮常快速和⾼效,将JSON转换为⼆进制表⽰。
QJsonObject
QJsonObject类⽤于封装JSON对象。
JSON对象是键值对,其中键是唯⼀的字符串,其值由QJsonValue代表。⼀个QJsonObject可以从QVariantMap转换/被转换。QJsonArray
QJsonArray类⽤于封装JSON数组。
⼀个JSON数组列表值。该列表可以通过从阵列插⼊和移除QJsonValue的操纵。⼀个QJsonArray可以从QVariantList转换为/被转换。⽂档中包含的数组或对象可以使⽤array()或object()进⾏检索,然后读取或操纵。
⽰例
QJsonObject
(1)⽣成Json
QJsonObject json;
json.insert("name", QString("Qt"));
json.insert("version", 5);
json.insert("windows", true);
QJsonDocument document;
document.setObject(json);
QByteArray byte_array = Json(QJsonDocument::Compact);
QString json_str(byte_array);
结果:
json_str:{"name": "Qt","version": 5,"windows": true}
(2)解析Json
乱码文字生成QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);
if( == QJsonParseError::NoError)
{
if(parse_doucment.isObject())
{
QJsonObject obj = parse_doucment.object();
ains("name"))
{
QJsonValue name_value = obj.take("name");
if(name_value.isString())
{
QString name = String();
}
}
ains("version"))
{
QJsonValue version_value = obj.take("version");
if(version_value.isDouble())
{
int version = Variant().toInt();
}
}
ains("windows"))
{
QJsonValue version_value = obj.take("windows");
if(version_value.isBool())
{
bool flag = Bool();
}
}
}
}
qt接收json数据中包含中⽂转换
因为在实际项⽬中,遇到json中含有汉字,在转换显⽰的时候出现乱码,如果我们要⽤QString的时候,所以我们在接收完之后进⾏⼀个转换:
void Receiver::dataread()
{
while(tcp_Msg->bytesAvailable()>0)
{
QByteArray datagram;
tcp_Msg->read(datagram.data(),datagram.size());
//在这⾥我们进⾏⼀个转换,之后就可以⽤QJson分析把我们收到的json数据
QString str = QString::fromLocal8Bit(datagram.data());
analysis(str);
}
}
}
之后我们进⾏解析含有中⽂的json数据,关键代码如下
void ReceiverWB::analysis(QString msg)
{
QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::StdString().data(), &json_error);
if( == QJsonParseError::NoError)
{
if(parse_doucment.isObject())
{
QJsonObject obj = parse_doucment.object();
ains("name"))
{
QJsonValue name_value = obj.take("name");
if(name_value.isString())
{
//在这⾥我们把汉字的名称做了转换,保存到tmpCamre->name⾥{"name":"张三"}
QString str = QString::fromLocal8Bit(String().toLocal8Bit().data());
strcpy(tmpCamra->StdString().data());
}
}
}
}
}
⼩结:以上便是在实际应⽤中遇到的乱码的问题,希望对有遇到此问题的朋友,有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。