struct2json
1.0.0
struct2json 是一個開源的C結構體與JSON 快速互轉庫,它可以快速實現結構體物件與JSON 物件之間序列化及反序列化要求。快速、簡潔的API 設計,大幅降低直接使用JSON 解析函式庫來實現此類功能的程式碼複雜度。
把物件導向設計應用到C語言中,是當下很流行的設計想法。由於C語言中沒有類,所以一般使用結構體struct
充當類,那麼結構體變數就是物件。有了物件之後,很多時候需要考慮物件的序列化及反序列化問題。 C語言不像許多高階語言擁有反射等機制,使得物件序列化及反序列化被原生的支援。
對於C語言來說,序列化為JSON 字串是個不錯的選擇,所以就得使用cJSON 這類JSON 解析庫,但是使用後的程式碼冗餘且邏輯性差,所以萌生對cJSON庫進行二次封裝,實現一個struct 與JSON 之間快速互轉的函式庫。 struct2json 就誕生於此。以下是struct2json 主要使用場景:
如下宣告了兩個結構體,結構體Hometown
是結構體Student
的子結構體
/* 籍贯 */
typedef struct {
char name [ 16 ];
} Hometown ;
/* 学生 */
typedef struct {
uint8_t id ;
uint8_t score [ 8 ];
char name [ 10 ];
double weight ;
Hometown hometown ;
} Student ;
使用前(來源檔案) | 使用後(來源檔案) |
---|---|
使用前(來源檔案) | 使用後(來源檔案) |
---|---|
将头文件(eg:mc_usr_def.h)放在demoinc目录下;
执行generate_struct_defination.py,生成struct_defination.txt;
执行generate_s2j_code.py,根据结构体定义自动生成结构体与JSON互转代码:my_struct_2_json.c,my_struct_2_json.h;
该脚本支持的参数类型有 基本类型 和 结构体类型,enum和指针按int处理,不支持union和位域;
支持的数组类型:支持基本类型一维数组,结构体一维数组,字符二维数组(字符串数组)
cd demo
编译测试代码,gcc ../cJSON/cJSON.c ../struct2json/src/*.c ./*.c -I ../cJSON/ -I ../struct2json/inc/ -lm -DDEBUGS2J -g -o tests2j
测试 ./tests2j
查看output输出和生成的JSON样例文件struct_defination.json;
预期输出:*:strcmp:0 *:strcmp:0
*:json_cmp:1
歡迎大家fork and pull request (Github|OSChina|Coding) 。如果覺得這個開源專案很讚,可以點擊專案首頁右上角的Star ,同時把它推薦給更多有需要的朋友。
具體內容參考docszh
下的文件。務必保證在閱讀文件後再使用。
MIT Copyright (c) [email protected]