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