一.不同类型数据转换示例:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
//QString 转 QByteArray:
QString str = "你好,世界!";
QByteArray byteArray = str.toUtf8();
qDebug()<<"byteArray::"<<byteArray;
//QByteArray 转 QString:
QByteArray byteArray2 = "你好,世界!";
QString str1 = QString::fromUtf8(byteArray2);
qDebug()<<"str::"<<str1;
//QString 转 QObject
QString aJsonStr = "{\"firstName\": \"Brett\",\"lastName\": \"McLaughlin\"}";
QJsonDocument lJsonDoc = QJsonDocument::fromJson(aJsonStr.toUtf8());
QJsonObject lJsonObj = lJsonDoc.object();
qDebug()<<"firstName::"<<lJsonObj["firstName"].toString()<<"\n"
<<"lastName::"<<lJsonObj["lastName"].toString();
//QObject 转 QString
QJsonDocument jsonDoc;
jsonDoc.setObject(lJsonObj);
QByteArray lJsonByte = jsonDoc.toJson(QJsonDocument::Compact);
QString lJsonStr(lJsonByte);
qDebug()<<"lJsonStr::"<<lJsonStr;
return app.exec();
}
运行结果:
知识点补充 :QJsonDocument::Compact讲解
QJsonDocument::Compact是用于生成不包含空格和换行符的紧凑JSON字符串的选项。
在Qt框架中,处理JSON数据时经常需要将JSON对象转换为字符串格式,以便于存储或传输。QJsonDocument类提供了这样的功能,它允许开发者将JSON对象转换成不同格式的字符串。具体到QJsonDocument::Compact,它的作用如下:
- 压缩格式化:使用QJsonDocument::Compact生成的JSON字符串不包含任何不必要的空白字符(如空格、制表符、换行符等),这使得JSON字符串尽可能紧凑,从而减少数据的大小,这对于网络传输或存储空间有限的场景非常有用。
- 方便解析:当接收端只需要解析JSON字符串的一部分时,紧凑格式由于其规律性,更易于截取和处理。
- 与Indented对比:与QJsonDocument::Indented选项相比,后者生成的JSON字符串会包含缩进和换行,使得人类阅读更加容易,但会增加字符串的长度。而QJsonDocument::Compact则正好相反,它生成的字符串体积更小,但可读性较差。
- 转换方法:要将QJsonDocument对象转换为紧凑格式的JSON字符串,可以使用toJson()成员函数并传入QJsonDocument::Compact作为参数。例如:
QByteArray compactJson = jsonDoc.toJson(QJsonDocument::Compact);
,其中jsonDoc
是一个QJsonDocument对象。综上所述,QJsonDocument::Compact是Qt提供的一个用于生成紧凑格式JSON字符串的选项,它有助于减小数据大小并简化部分解析的过程。在需要节省空间或传输数据的场合,使用这一选项会非常有帮助。
二.数据解析失败提示处理
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
//QString aJsonStr1 = "{\"firstName\": \"Brett\"\"lastName\": \"McLaughlin\"}";
QString aJsonStr1 = "{\"firstName\": \"\"\"lastName\": \"McLaughlin\"}";
//数据解析失败输出错误处理
QJsonParseError lJsonParseError;
QJsonDocument lJsonDoc1 = QJsonDocument().fromJson(aJsonStr1.toUtf8(), &lJsonParseError);
if(lJsonParseError.error != QJsonParseError::NoError) {
qWarning() << "Parse json failed: " << lJsonParseError.errorString();
return {};
}
return app.exec();
}
运行结果: