版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/zhutianlong/article/details/49861223
【 聲明:版權所有,歡迎轉載,請勿用於商業用途。 聯系信箱:armink.ztl@gmail.com】
struct2json
struct2json 是一個開源的C結構體與 JSON 快速互轉庫,它可以快速實現 結構體對象 與 JSON 對象 之間序列化及反序列化要求。快速、簡潔的 API 設計,大大降低直接使用 JSON 解析庫來實現此類功能的代碼復雜度。
起源
把面向對象設計應用到C語言中,是當下很流行的設計思想。由於C語言中沒有類,所以一般使用結構體 struct 充當類,那么結構體變量就是對象。有了對象之后,很多時候需要考慮對象的序列化及反序列化問題。C語言不像很多高級語言擁有反射等機制,使得對象序列化及反序列化被原生的支持。
對於C語言來說,序列化為 JSON 字符串是個不錯的選擇,所以就得使用 cJSON 這類 JSON 解析庫,但是使用后的代碼冗余且邏輯性差,所以萌生對cJSON庫進行二次封裝,實現一個 struct 與 JSON 之間快速互轉的庫。 struct2json 就誕生於此。下面是 struct2json 主要使用場景:
持久化 :結構體對象序列化為 JSON 對象后,可直接保存至文件、Flash,實現對結構體對象的掉電存儲;
通信 :高級語言對JSON支持的很友好,例如: Javascript、Groovy 就對 JSON 具有原生的支持,所以 JSON 也可作為C語言與其他語言軟件之間的通信協議格式及對象傳遞格式;
可視化 :序列化為 JSON 后的對象,可以更加直觀的展示到控制台或者 UI 上,可用於產品調試、產品二次開發等場景;
如何使用
聲明結構體
如下聲明了兩個結構體,結構體 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;
將結構體對象序列化為 JSON 對象
未使用(源文件) | 使用后(源文件) |
---|---|
![]() |
![]() |
將 JSON 對象反序列化為結構體對象
未使用(源文件) | 使用后(源文件) |
---|---|
![]() |
![]() |
歡迎大家 fork and pull request(Github|OSChina|Coding) 。如果覺得這個開源項目很贊,可以點擊項目主頁 右上角的Star,同時把它推薦給更多有需要的朋友。
文檔
具體內容參考\docs\zh\下的文件。務必保證在 閱讀文檔 后再使用。
許可
MIT Copyright (c) armink.ztl@gmail.com