C語言JSON序列化/反序列化


最近想找一個C語言處理嵌套結構體和結構體數組的json庫,理想的是能夠很容易處理復雜結構體嵌套,並且使用簡單的,但是沒找到比較合適的,於是打算自己封裝一個;

兩個問題:

  1. C語言結構體本身沒有元數據,這也就沒法在生成過程中自動分析類型進行處理,所以,需要生成對應結構體的元數據信息,根據元數據完成對結構體的序列化和反序列化;
  2. 結構體的嵌套很復雜,需要支持多層結構體和結構體數組直接互相嵌套的序列化反序列化,於是考慮使用遞歸函數,結合1中的元數據,進行結構體偏移和處理;

考慮如下步驟:

  1. 配置xml文件,文件中配置結構體,結構體中的成員屬性,以及它們之間的關系;
  2. 結合Tinyxml庫編寫解析xml文件的工具,通過這個工具生成包含結構體,結構體元數據(包含結構體關系,成員名稱,類型,偏移,大小等),序列化/反序列化接口的頭文件;
  3. 抽離公共的json操作函數到公共頭文件,這些操作函數通過元數據和偏移的方式處理結構體和json,更深入部分則使用了cJSON庫;
  4. 模塊引用2中生成的頭文件,然后通過結構體指針,即可完成結構體序列化成json,以及json反序列化成結構體;

花了兩天時間來做這些事情,初步測試了下,功能正常,也達到了我預期的一行代碼序列化,一行代碼反序列化的高級語言的json操作特性;

總之,滿意;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM