色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美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

    文章

    7528

    瀏覽量

    164187
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137428
  • RFC
    RFC
    +關注

    關注

    0

    文章

    16

    瀏覽量

    10124
  • JSON
    +關注

    關注

    0

    文章

    119

    瀏覽量

    6995
收藏 人收藏

    評論

    相關推薦

    mesh的內存占用能否優化?

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

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

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

    枚舉變量占用多少內存?

    枚舉變量占用多少內存
    發表于 10-11 08:07

    請問STM32可以用JSON嗎?

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

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

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

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

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

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

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

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

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

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

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

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

    Linux:測試進程占用的虛擬內存大小
    的頭像 發表于 06-23 09:23 ?2909次閱讀
    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 ?2029次閱讀
    Windows不明<b class='flag-5'>內存</b><b class='flag-5'>占用</b>案例分析:Driver Locked

    什么是JSON數據

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

    關于JSON數據

    如何理解JSON數據?作為NoSQL數據的一種類型,JSON數據有哪些優勢呢?JSON數據
    的頭像 發表于 12-06 13:46 ?913次閱讀
    關于<b class='flag-5'>JSON</b>數據<b class='flag-5'>庫</b>
    主站蜘蛛池模板: 真实的强视频免费网站 | 日韩亚洲欧洲在线rrrr片 | 欧美日韩高清一区二区三区 | 欧美整片华人play | 男女亲吻摸下面吃奶视频 | 俄罗斯搜索引擎Yandex推广入口 | 久久超碰色中文字幕 | 天堂精品国产自在自线 | 日韩亚洲欧美中文在线 | 51久久夜色精品国产 | 边摸边吃奶边做下面视频 | 福利片福利一区二区三区 | 日本美女抠逼 | 男人就爱吃这套下载 | 嫩草影院精品视频在线观看 | ass亚洲熟妇毛耸耸pics | 国内2018年午夜福利5678 | 亚洲精品成人无码区一在线观看 | 美女丝袜夹b | 中文字幕无码他人妻味 | 波多野结衣教师系列6 | 男人都懂www深夜免费网站 | 在线观看日本污污ww网站 | 午夜日韩久久影院 | 久久在精品线影院 | 成人天堂婷婷青青视频在线观看 | 榴莲推广APP网站入口官网 | 99视频这里只有精品国产 | 国产高清精品国语特黄A片 国产高清国内精品福利色噜噜 | 麻婆豆腐传媒视频免费 | 999久久国产精品免费人妻 | 9久高清在线不卡免费无吗视频 | 草莓在线观看 | oldgrand欧洲老妇人 | 四库影院永久国产精品 | 欧美末成年videos在线 | 国产精品自在在线午夜蜜芽tv在线 | 果冻传媒APP免费网站在线观看 | good神马电影伦理午夜 | 亚洲日韩视频免费观看 | 日本一卡2卡3卡四卡精品网站 |