Qt Json操作demo

文章目录[隐藏]

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();
    }

}
posted @ 2020-04-14 04:40  不随。  阅读(8)  评论(0编辑  收藏  举报  来源