在Qt中可以用QJsonDocument、QJsonParseError、QJsonObject、QJsonArray、QJsonValue等类来解析json数据,但这种解析有时比较麻烦,代码量也比较多,其实也可以用QMap来解析Json数据,并且QMap和Json可以 相互转换,下面来看具体的实例:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void initConnect();public slots:void slotQMapToJson();void slotJsonToQMap();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMap>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);initConnect();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initConnect()
{//connect(ui->pushButton_QMapToJson, SIGNAL(clicked()), this, SLOT(slotQMapToJson()));connect(ui->pushButton_QMapToJson, &QPushButton::clicked,this, &MainWindow::slotQMapToJson);connect(ui->pushButton_JsonToQMap, &QPushButton::clicked,this, &MainWindow::slotJsonToQMap);
}void MainWindow::slotQMapToJson()
{QMap<QString, QVariant> mapData = QMap<QString, QVariant>();mapData.insert("id", "3000101");mapData.insert("number", "15289705326");mapData.insert("name", "Job Bresh");QJsonDocument doc = QJsonDocument::fromVariant(QVariant(mapData));QByteArray jba = doc.toJson();QString jsonString = QString(jba);qDebug() << "QMap<QString, QVariant> to json: \n" << jsonString;QByteArray njba = jsonString.toUtf8();QJsonObject nobj = QJsonObject(QJsonDocument::fromJson(njba).object());//字符串转换后的对象qDebug() << "string conversion of object: \n"<< nobj.take("id").toString() << endl<< nobj.take("number").toString() << endl<< nobj.take("name").toString() << endl;
}void MainWindow::slotJsonToQMap()
{//构建JSON对象QJsonObject json;json.insert("id", "3000102");json.insert("number", "15789705324");json.insert("name", "Job Victor");//构建JSON文档QJsonDocument document;document.setObject(json);QByteArray byteArray = document.toJson(QJsonDocument::Compact);QString strJson(byteArray);qDebug() << strJson;//Json转QMapQVariantMap map = json.toVariantMap();int numMap = map.size();//取值qDebug() << "numMap===========" << numMap;qDebug() << "map[\"id\"]===========" << map["id"];qDebug() << "map[\"id\"].toString()===========" << map["id"].toString();//qDebug() << "map.take(\"number\")===========" << map.take("number").toString();qDebug() << "map.value(\"name\")===========" << map.value("name").toString();QMap<QString, QVariant>::const_iterator iter = map.constBegin();while(iter != map.constEnd()){qDebug() << "key:" << iter.key() << " value:" << iter.value();++iter;}
}
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
运行结果: