Тайлбар байхгүй

ryancw 8ea376a609 添加一些示例 2 жил өмнө
.vscode 8ea376a609 添加一些示例 2 жил өмнө
RFC8259JsonData 0a1fe651f6 初始化代码 2 жил өмнө
RyanJson 8ea376a609 添加一些示例 2 жил өмнө
cJSON 0a1fe651f6 初始化代码 2 жил өмнө
docs 8ea376a609 添加一些示例 2 жил өмнө
valloc 8ea376a609 添加一些示例 2 жил өмнө
yyjson 0a1fe651f6 初始化代码 2 жил өмнө
.gitignore 0a1fe651f6 初始化代码 2 жил өмнө
LICENSE 61ec1f4bf1 Initial commit 2 жил өмнө
README.md 8ea376a609 添加一些示例 2 жил өмнө
RFC8259JsonTest.c 8ea376a609 添加一些示例 2 жил өмнө
RyanJsonExample.c 8ea376a609 添加一些示例 2 жил өмнө
RyanJsonMemoryFootprintTest.c 8ea376a609 添加一些示例 2 жил өмнө
RyanJsonTest.c 8ea376a609 添加一些示例 2 жил өмнө
main.c 8ea376a609 添加一些示例 2 жил өмнө

README.md

RyanJson

一个针对资源受限的嵌入式设备优化的Json库,内存占用极小的通用json库,简洁高效!

初衷:项目进行重构json结构变复杂了很多,cJSON内存占用太高,已经满足不了需求。

1、介绍

RyanJson是一个小巧的c语言json解析器,包含json文本文件解析 / 生成,专门针对内存占用进行优化

在内存占用减少40% - 60%的前提下,实现了大部分cJSON接口。

运行速度和cJSON差不多,在json文本数据小于80k / 嵌套深度3000以下的json数据,RyanJson和cJSON因为小巧的设计速度要比别的json库快得多。

  • 低内存占用:使用动态扩展技术,在32位系统下,一个基础json节点仅占用8字节。
  • 开发人员友好:仅有一个c文件和头文件轻松集成,hook函数方便自定义内存钩子。类cJSON的api,迁移成本低。
  • 严格但不严苛:符合 RFC 8295 大部分JSON标准,支持无限的json嵌套级别(需注意堆栈空间)、灵活的配置修改项
  • 可扩展性:允许注释(需调用mini函数清除注释后再解析)、尾随逗号等无效字符(parse时可配置是否允许)等

2、局限性

  • 使用int / double表示json中的number类型,精度有所丢失。建议64位的number类型最好用string字符串表示。
  • 对象中允许有重复的key,RyanJson库采用单向链表,会访问到第一个对象。

3、测试

测试代码可在本项目根目录查看。

RFC 8295 标准测试,大部分嵌入式场景不会出现复杂的特殊json结构

RyanJson和cJSON都不适合处理复杂的UTF-16字符集,如果项目需要兼容Unicode字符集,可以考虑yyjson / json-c

image-20230822112554099

内存占用测试

image-20230822112757872

4、文档

文档可在 Ryan组件库获取

5、联系

Email:1831931681@qq.com

wx:17513216936