概述: Qt中使用Json比較方便,不像純C++需要導入CJson RapidJson JsonCpp等第三方的庫,主要使用到QJsonDocument、QJsonObject對象即可
1、如何構造一個json字符串
? ? ? ? 假如我們需要構造 {"cmd":"1001","data":{"content":"05:00","type":1}} 這樣的json串,在Qt中應該這樣編寫代碼
main.cpp
#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的動態庫
#include "CcJsonTool.h"int main(int argc, char *argv[])
{auto cmd = 1001;auto type = 1;auto content = "05:00";QVariantMap contentMap;contentMap["cmd"] = QString::number(cmd);QVariantMap dataMap;dataMap["type"] = type;dataMap["content"] = content;contentMap["data"] = dataMap;//使用工具構建CcJsonTool jsonTool;auto str = jsonTool.toJsonFromVariantMap(contentMap);qDebug() << "jsonStr:" << str;}
CcJsonTool.h
#pragma once#include "cc_tools_global_config.h"#include <QString>
#include <QObject>
#include <QVariantMap>class CCTOOLS_EXPORT CcJsonTool : public QObject
{Q_OBJECT
public:CcJsonTool(QObject* parent = nullptr);~CcJsonTool();QString toJsonFromVariantMap(QVariantMap dataMap);bool ParseJsonFromString(const QString& jsonData);
};
CcJsonTool.cpp
#include "CcJsonTool.h"#include <QJsonDocument>
#include <QJsonObject>CcJsonTool::CcJsonTool(QObject* parent)
:QObject(parent)
{}CcJsonTool::~CcJsonTool()
{}QString CcJsonTool::toJsonFromVariantMap(QVariantMap dataMap)
{// dataMap: {"cmd":"1001","data":{"content":"05:00","type":1}}QByteArray command = QJsonDocument(QJsonObject::fromVariantMap(dataMap)).toJson(QJsonDocument::Compact);return QString::fromUtf8(command);
}bool CcJsonTool::parseJsonFromString(const QString& jsonData)
{// jsonData: {"cmd":"1001","data":{"content":"05:00","type":1}}QJsonParseError error;auto jsonDoc = QJsonDocument::fromJson(jsonData.toUtf8(), &error);if (error.error != QJsonParseError::NoError){return false;}auto mapContent = jsonDoc.object().toVariantMap();if (!mapContent.contains("cmd") || !mapContent.contains("data")){return false;}auto mapData = mapContent["data"].toMap();if (!mapData.contains("content")){return false;}auto cmd = mapContent["cmd"].toString().toUInt();if (cmd == 1001){auto type = mapData["type"].toInt();auto content = mapData["content"];}return true;
}
2、解析一個Json字符串
main.cpp
#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的動態庫
#include "CcJsonTool.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);//jsonStrauto JsonStr = "{\"cmd\":\"1001\",\"data\":{\"content\":\"05:00\",\"type\":1}}";if (jsonTool.parseJsonFromString(JsonStr)){qDebug() << "parse json str success";}else{qDebug() << "parse json str failed";}return app.exec();
}
3、參考gitee倉庫上的測試源碼
CcQtApp: Qt測試demo