1. 程式人生 > 其它 >Qt Json序列化與反序列化

Qt Json序列化與反序列化

Qt Json序列化與反序列化

Qt的一個用於序列化與反序列化的庫 xpack,也可用於c++。

使用方法

下載庫檔案

xpack 標籤 - Gitee.com

按照它的預設樣子放好,建議單獨放一個資料夾

專案引用

不用修改.pro檔案,直接在原始碼檔案裡 include相對路徑 進來就好了

例如:

  • Year.h
#include "../xpack/json.h"

struct Year{
    int y;
    QString m;
    int d;
    Year();
    
    XPACK(O(
    	y,
        m,
        d
    ));
};
  • main.cpp
#include "../xpack/json.h"

int main(int argc, char* argv[]){
	Year y = Year();
	y.y = 2022;
	y.m = "03";
	y.d = 14;
	
    std::string jsonStr = xpack::json::encode(year);
	
    std::cout<< jsonStr <<std::endl;
}
  • 應用程式輸出
"{\"y\":2022,\"m\":\"03\",\"d\":14}"
  • 若存在類巢狀,被巢狀的類需要修改
struct datetime{
	Year date;//上面寫的那個Year類,需要修改XPACK的寫法
	int h;
	int M;
	int s
};

//改為
struct Year{
    int y;
    QString m;
    int d;
    Year();
};
//寫在struct Year外
XPACK_OUT(Year, O(
    	y,
        m,
        d
));

開啟Qt支援

  • 修改config.h,開啟XPACK_SUPPORT_QT這個巨集(或者在編譯選項開啟)
  • 當前支援 QString/QMap/QList/QVector

Reference

Other

我記得Qt自己支援一種類的寫法,支援class的,但是我找不到那種方法了
會用到 Q_PROPERTY(int y READ y WRITE setY)類似於這樣的,但是我找不到了這種方法了,這種好像是Qt自支援的,誰知道記得評論下,啊


誰知道Qt自己的那種Json方法,記得評論下