struct2jsonC 結(jié)構(gòu)體與 JSON 互轉(zhuǎn)庫
struct2json 是一個開源的C結(jié)構(gòu)體與 JSON 快速互轉(zhuǎn)庫,它可以快速實現(xiàn) 結(jié)構(gòu)體對象 與 JSON 對象 之間序列化及反序列化要求??焖?、簡潔的 API 設(shè)計,大大降低直接使用 JSON 解析庫來實現(xiàn)此類功能的代碼復(fù)雜度。
起源
把面向?qū)ο笤O(shè)計應(yīng)用到C語言中,是當(dāng)下很流行的設(shè)計思想。由于C語言中沒有類,所以一般使用結(jié)構(gòu)體struct 充當(dāng)類,那么結(jié)構(gòu)體變量就是對象。有了對象之后,很多時候需要考慮對象的序列化及反序列化問題。C語言不像很多高級語言擁有反射等機制,使得對象序列化及反序列化被原生的支持。
對于C語言來說,序列化為 JSON 字符串是個不錯的選擇,所以就得使用 cJSON 這類 JSON 解析庫,但是使用后的代碼冗余且邏輯性差,所以萌生對cJSON庫進(jìn)行二次封裝,實現(xiàn)一個 struct 與 JSON 之間快速互轉(zhuǎn)的庫。 struct2json 就誕生于此。下面是 struct2json 主要使用場景:
- 持久化 :結(jié)構(gòu)體對象序列化為 JSON 對象后,可直接保存至文件、Flash,實現(xiàn)對結(jié)構(gòu)體對象的掉電存儲;
- 通信 :高級語言對JSON支持的很友好,例如: Javascript、Groovy 就對 JSON 具有原生的支持,所以 JSON 也可作為C語言與其他語言軟件之間的通信協(xié)議格式及對象傳遞格式;
- 可視化 :序列化為 JSON 后的對象,可以更加直觀的展示到控制臺或者 UI 上,可用于產(chǎn)品調(diào)試、產(chǎn)品二次開發(fā)等場景;
如何使用
聲明結(jié)構(gòu)體
如下聲明了兩個結(jié)構(gòu)體,結(jié)構(gòu)體 Hometown 是結(jié)構(gòu)體 Student 的子結(jié)構(gòu)體
/* 籍貫 */
typedef struct {
char name[16];
} Hometown;
/* 學(xué)生 */
typedef struct {
uint8_t id;
uint8_t score[8];
char name[10];
double weight;
Hometown hometown;
} Student;
將結(jié)構(gòu)體對象序列化為 JSON 對象
| 使用前(源文件) | 使用后(源文件) |
|---|---|
| |
|
將 JSON 對象反序列化為結(jié)構(gòu)體對象
| 使用前(源文件) | 使用后(源文件) |
|---|---|
| |
|
歡迎大家 fork and pull request(Github|OSChina) 。如果覺得這個開源項目很贊,可以點擊項目主頁 右上角的Star,同時把它推薦給更多有需要的朋友。
文檔
具體內(nèi)容參考\docs\zh\下的文件。務(wù)必保證在 閱讀文檔 后再使用。
許可
MIT Copyright (c) [email protected]
