Qt Json 操作
JSON 操作最主要的几个函数分别是:
QJsonDocument json 文档,每个 json 都是 yi'ge 一个 json 文档
QJsonObject json 对象, 对应 json 中的{}
QJsonArray json 数组, 对应 json 中的[]
QJsonParseError json 出错时很有用,是一个枚举,其中枚举项解释很清楚可以再帮助文档中查看
Qt Json 操作 Demo 代码
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include <QDebug>
struct Student
{
char key1[255];
char key2[255];
};
struct MyJson
{
int id;
char name[255];
char desc[255];
Student stu[10];
};
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void jsonToString();
void stringToJson();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// jsonToString();
stringToJson();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::jsonToString()
{
QJsonDocument jsonDoc;
QJsonObject jsonObjA;
QJsonArray jsonArrayA;
QJsonObject jsonObjA_A;
QJsonObject jsonObjA_B;
jsonObjA_A.insert("key", "key");
jsonObjA_A.insert("key1", "key1");
jsonObjA_B.insert("key2", "key2");
jsonObjA_B.insert("key3", "key3");
jsonArrayA.append(jsonObjA_A);
jsonArrayA.append(jsonObjA_B);
jsonObjA.insert("id", 1);
jsonObjA.insert("name", "xiaohua");
jsonObjA.insert("desc", "nihao");
jsonObjA.insert("keys", jsonArrayA);
jsonDoc.setObject(jsonObjA);
qDebug() << jsonDoc.toJson(QJsonDocument::Compact);
}
void MainWindow::stringToJson()
{
MyJson myJson;
QString strJson = "{\"desc\":\"nihao\",\"id\":1,\"keys\":[{\"key1\":\"key\",\"key2\":\"key1\"},{\"key1\":\"key2\",\"key2\":\"key3\"}],\"name\":\"xiaohua\"}";
QJsonParseError jsonError;
QJsonDocument jsonDoc;
QJsonObject jsonObjA;
QJsonArray jsonArrayA;
QJsonObject jsonObjA_A;
QJsonObject jsonObjA_B;
jsonDoc = QJsonDocument::fromJson(strJson.toUtf8(), &jsonError);
if(jsonError.error == QJsonParseError::NoError)
{
if(jsonDoc.isObject() && !jsonDoc.isEmpty()) // json 对象
{
QVariantMap result = jsonDoc.toVariant().toMap();
qDebug() << "[" << __FUNCTION__ <<__LINE__ << "] :"
<< result["name"] << result["desc"] << result["id"];
myJson.id = result["id"].toInt();
// myJson.name = result["name"].typeName();
qDebug() << result["name"].toByteArray().size();
foreach(QVariant key, result["keys"].toList())
{
QVariantMap keyMap = key.toMap();
qDebug() << "[" << __FUNCTION__ <<__LINE__ << "] :"
<< keyMap["key1"] << keyMap["key2"];
}
}
}
else
{
qDebug() << jsonError.errorString().toUtf8();
}
}