在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_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
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转QMap
QVariantMap 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();
}
运行结果: