<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          struct2jsonC 結(jié)構(gòu)體與 JSON 互轉(zhuǎn)庫(kù)

          聯(lián)合創(chuàng)作 · 2023-09-21 20:29

          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]

          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高潮视频在线 | 豆花视频成人版视频在线观看 | 可以看的免费黄色片 | 成a人v | 日韩va在线观看 日韩成人免费大片 |