一.不同类型数据转换示例:
#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 转 QObjectQString 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 转 QStringQJsonDocument 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();
}
运行结果: