色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

更低內存占用的通用Json庫-RyanJson

冬至子 ? 來源:Ryan_CW ? 作者:Ryan_CW ? 2023-08-24 17:23 ? 次閱讀

1、介紹

RyanJson是一個小巧的c語言json解析器,包含json文本文件解析 / 生成,專門針對內存占用進行優化,相比cJSON內存占用減少30% - 60%,運行速度和cJSON差不多。

低內存占用:使用動態擴展技術,在32位系統下,一個基礎json節點僅占用8字節。
開發人員友好:僅有一個c文件和頭文件輕松集成,hook函數方便自定義內存鉤子。類cJSON的api,遷移成本低。
嚴格但不嚴苛:符合 RFC 8295 大部分JSON標準,支持無限的json嵌套級別(需注意堆棧空間)、靈活的配置修改項
可擴展性:允許注釋(需調用mini函數清除注釋后再解析)、尾隨逗號等無效字符(parse時可配置是否允許)等

2、設計
RyanJson設計時大量借鑒了 json 和 cJSON ! 是從 json 的基礎上修改來的

json語法是JavaScript對象語法的子集

在json語法中,數據以鍵值對的形式存儲(數組沒有key)

在RyanJson解析器中,使用結構體來表示一個鍵值對,是存儲的最小單元,結構如下:

struct RyanJsonNode
{
uint32_t info; // 包含類型,key等標志
struct RyanJsonNode *next; // 單鏈表node節點
// [char key] 有key的json節點, 會動態創建指針
// 有value值的節點, 會動態創建指針
// [int32_t value / double value / char
value / RyanJson_t item]
};
typedef struct RyanJsonNode *RyanJson_t;
此結構體包含兩個固定成員 info 和 next;

info:為當前節點的配置信息用來表示 節點數據類型 和 flag標志位。

bits low --> high

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | NA | NA | .......

______________________________/ | | |
low 8bits | | |
| | | |
V | | |
RyanJsonTypeUnknow (bit0) | | |
RyanJsonTypeNull (bit1) | | |
RyanJsonTypeBool (bit2) | | +----> RyanJsonWithKeyFlag (1 << 10)
RyanJsonTypeNumber (bit3) | |
RyanJsonTypeString (bit4) | +--------> RyanJsonValueNumberIntFlag (1 << 9)
RyanJsonTypeArray (bit5) |
RyanJsonTypeObject (bit6) +------------> RyanJsonValueBoolTrueFlag (1 << 8)
spare (bit7)
next:指針指向鏈表下一個節點

{
"name": "RyanJson",
next (
"version": "xxx",
next (
"repository": "https://github.com/Ryan-CW-Code/RyanJson",
next (
"keywords": ["json", "streamlined", "parser"],
next ( _ item _/ _ next _/ _ next _/
"others": {
...
}
}
此結構體還包括兩個可能動態創建的成員 key 和 value;

key:存儲鍵值對的 key 信息,當存在key時會在申請RyanJsonNode內存時,動態添加。

value:存儲鍵值對的 value 信息,會根據不同節點類型創建不同的value值。會在申請RyanJsonNode內存時,動態添加。

3、測試
測試代碼可在本項目根目錄查看。

性能測試
RyanDocs文檔中心,有基于 yyjson_benchmark 的測試結果

內存占用測試

1.jpg

RFC 8295 標準測試,大部分嵌入式場景不會出現復雜的特殊json結構
RyanJson和cJSON都不適合處理復雜的UTF-16字符集,如果項目需要兼容Unicode字符集,可以考慮yyjson / json-c

1.jpg

4、局限性
使用int / double表示json中的number類型,精度有所丟失。建議64位的number類型最好用string字符串表示。
對象中允許有重復的key,RyanJson庫采用單向鏈表,會訪問到第一個對象。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7484

    瀏覽量

    163765
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136695
  • RFC
    RFC
    +關注

    關注

    0

    文章

    16

    瀏覽量

    10101
  • JSON
    +關注

    關注

    0

    文章

    117

    瀏覽量

    6963
收藏 人收藏

    評論

    相關推薦

    mesh的內存占用能否優化?

    我測試到esp_mesh在開啟的情況下,即打開wifi和打開mesh,DRAM會占用大約130kb內存。且測試發現esp32剩余內存不足大約60kb的時候系統會重啟。這樣來說300KB內存
    發表于 06-28 15:32

    stm32 使用u*** host占用內存空間很大!!!

    如何解決stm32 使用u*** host占用內存空間很大的問題呢???
    發表于 01-22 16:44

    請問STM32可以用JSON嗎?

    STM32能不能支持JSON的操作
    發表于 10-23 07:45

    減少QQ內存占用的一則方法

    減少QQ內存占用的一則方法 隨著QQ的功能越來越多,QQ占用的資源也是越來越多,為了減小它的資源占用量,大家想出了多種方法其中有把
    發表于 01-14 11:23 ?687次閱讀

    Android高效內存:讓圖片占用盡可能少的內存

    在做內存優化的時候,我們發現除了解決內存泄露問題,剩下的就只有想辦法減少真實的內存占用。而在App中,大部分內存可能被我們圖片
    的頭像 發表于 06-02 11:05 ?4914次閱讀

    Java服務器內存和CPU占用過高的原因

    造成服務器內存占用過高只有兩種情況:內存溢出或內存泄漏
    的頭像 發表于 03-21 15:50 ?2.2w次閱讀

    電腦內存占用過高加內存條起作用嗎

    電腦內存占用過高加內存條有用。內存容量小是內容占用過高的其中一個原因,所以加內存條可以解決問題;
    發表于 06-16 10:25 ?6662次閱讀

    虛擬機:查看進程內存和CPU占用的方法

    虛擬機:查看進程內存和CPU占用的方法
    的頭像 發表于 06-22 11:06 ?8482次閱讀

    Linux:測試進程占用的虛擬內存大小

    Linux:測試進程占用的虛擬內存大小
    的頭像 發表于 06-23 09:23 ?2880次閱讀
    Linux:測試進程<b class='flag-5'>占用</b>的虛擬<b class='flag-5'>內存</b>大小

    面向NoSQL數據JSON文檔異常檢測模型

    數據常用的數據存儲格式,JSON因簡單性和靈活性備受歡迎。然而,NoSαL數據缺乏模弌信息,在JSON文檔存入數據辶前,需要對其進行數
    發表于 04-13 15:30 ?20次下載
    面向NoSQL數據<b class='flag-5'>庫</b>的<b class='flag-5'>JSON</b>文檔異常檢測模型

    自編適用于嵌入式單片機Json封包與解析的程序

    @[TOC]**自編適用于嵌入式單片機Json封包與解析的程序**說明:由于網上提供的標準JSON,對向單片機這類的小設備占用資源過多,很不實際,所以用C語言自編,在平臺STM32F
    發表于 12-05 16:51 ?17次下載
    自編適用于嵌入式單片機<b class='flag-5'>Json</b>封包與解析的程序

    Windows不明內存占用案例分析:Driver Locked

    前一段有客戶反映Windows系統下不明內存占用越來越多,128GB物理內存的主機,啟動完成后就有大約一半的內存占用,導致留給應用的
    的頭像 發表于 09-25 14:49 ?1923次閱讀
    Windows不明<b class='flag-5'>內存</b><b class='flag-5'>占用</b>案例分析:Driver Locked

    如何利用Python和pandas來處理json數據

    了如何利用Python和pandas(Python的第三方)來處理json數據,主要內容包含: json數據簡介 常用json數據轉化網站 jso
    的頭像 發表于 11-01 10:59 ?2359次閱讀
    如何利用Python和pandas來處理<b class='flag-5'>json</b>數據

    什么是JSON數據

    如何理解JSON數據?作為NoSQL數據的一種類型,JSON數據有哪些優勢呢?JSON數據
    的頭像 發表于 12-02 08:04 ?863次閱讀
    什么是<b class='flag-5'>JSON</b>數據<b class='flag-5'>庫</b>

    關于JSON數據

    如何理解JSON數據?作為NoSQL數據的一種類型,JSON數據有哪些優勢呢?JSON數據
    的頭像 發表于 12-06 13:46 ?868次閱讀
    關于<b class='flag-5'>JSON</b>數據<b class='flag-5'>庫</b>
    主站蜘蛛池模板: 在线广播收听| 性xxxx直播放免费| 国产亚洲精品久久久久久国 | 欧美videosgratis杂交| 高H短篇辣肉纯肉| 亚洲免费一区| 男生插曲女生身全过程| 国产成人在线视频网站| 一本之道高清www在线观看| 内射无码AV-区二区在线观看| 国产成人免费观看在线视频| 亚洲熟伦熟女专区| 欧美巨大xxxx做受孕妇视频| 国产精品嫩草影院一区二区三区| 伊人久久综合热青草| 欧美性情一线免费http| 国产人妻人伦精品久久久| 自拍偷拍2| 手机免费毛片| 久热在线这里只有精品7| 动漫在线观看免费肉肉 | 国精产品一区一区三区有限在线 | 欧美freesex黑人又粗又| 国产精品久久久久婷婷五月色| 在线看片福利无码网址| 日韩精品真人荷官无码| 久久re热线视频精品99| 耻辱の奴隷淑女中文字幕| 亚洲日韩精品AV中文字幕| 情欲.美女高潮| 精品久久久久久久久免费影院| tube69hdxxxx日本| 亚洲日本va中文字幕久久| 欧美在线视频一区| 精品久久久久久久久免费影院 | 久久久久嫩草影院精品| 俄罗斯少女人体| 2021国产精品国产精华| 亚州AV中文无码乱人伦在线| 暖暖 视频 在线 观看 高清| 国精产品砖一区二区三区糖心|