33>
44> 🎯 内存占用降低 ** 50%** | 🛡️ ** 100%** 模糊测试覆盖 | 🚀 ** 零递归** 栈依赖
55
6- 📢 ** 使用中遇到问题,欢迎提交 Issue 或在 [ RT-Thread 社区] ( https://club.rt-thread.org/index.html ) 提问。**
6+ 📢 ** 使用中遇到问题,欢迎提交 Issue 或在 [ RT-Thread 社区] ( https://club.rt-thread.org/index.html ) 提问。**
77
88** 快速入口:** ` example/ ` 、` ./run_local_base.sh ` 、` AGENTS.md `
99
10- ### 1、介绍
10+ ## 1、介绍
1111
12- #### ✅ 特性亮点
12+ RyanJson 面向 MCU、RTOS 等资源受限场景,重点优化节点内存布局、深层嵌套可用性,以及嵌入式语义下的可验证性。
1313
14- - 💡 ** 极致内存优化:** 通过动态内存扩展 + 紧凑布局,兼容未对齐访问,相较 cJSON 内存占用约降低 ** 50%** (详见 [ 内存占用对比报告] ( memoryUsageCompareQemu.md ) )。
15- - 💡 ** 适配 malloc 头部与对齐策略:** 通过配置匹配不同平台的分配器特性,平衡内联阈值与内存占用。
14+ ### 特性亮点
15+
16+ - 💡 ** 极致内存优化:** 通过动态内存扩展 + 紧凑布局,兼容未对齐访问,相较 cJSON 内存占用约降低 ** 50%** (详见 [ 内存占用对比报告] ( reports/memory/qemu.md ) )。
1617- 🧱 ** 零递归栈依赖:** 采用线索化链表 + 迭代 DFS,避免递归栈依赖,深层嵌套栈占用可控。
17- - 🔍 ** 模糊测试护城河:** 基于 [ LLVM LibFuzzer] ( https://llvm.org/docs/LibFuzzer.html ) 进行上亿纪随机用例生成与回归,分支覆盖率100% 。** [ 点击在线查看覆盖率信息] ( https://ryan-cw-code.github.io/RyanJson/ ) **
18- - 🧪 ** 单元测试矩阵与 QEMU 语义验证一体化 :** 覆盖 double、重复 key、深层嵌套、链表稳定性等路径,并在 Cortex-M 语义下校验未对齐访问与 HardFault,核心语义宏组合覆盖 。
18+ - 🔍 ** 模糊测试护城河:** 基于 [ LLVM LibFuzzer] ( https://llvm.org/docs/LibFuzzer.html ) 进行上亿级随机用例生成与回归,覆盖率信息可在线查看 。** [ 点击在线查看覆盖率信息] ( https://ryan-cw-code.github.io/RyanJson/ ) **
19+ - 🧪 ** 单元测试矩阵与 QEMU 语义验证 :** 覆盖 double、重复 key、深层嵌套、链表稳定性等路径,并在 Cortex-M 语义下校验未对齐访问与 HardFault。
1920- 🛡️ ** 运行时安全分析验证:** 使用 ** [ Sanitizer] ( https://clang.llvm.org/docs/index.html#sanitizers ) ** 系列工具,捕获内存越界、Use-after-free、数据竞争、未定义行为、内存泄漏等问题,提升代码健壮性与安全性。
2021- 📐 ** 高质量代码保障:** 引入 ** [ clang-tidy] ( https://clang.llvm.org/extra/clang-tidy/#clang-tidy ) ** 与 ** [ Cppcheck] ( https://cppcheck.sourceforge.io/ ) ** 进行静态分析,目标是接近语法级“零缺陷”。
21- - 🤖 ** AI 辅助开发与审查:** 结合 ** [ Codex] ( https://openai.com/codex ) ** 、** [ Gemini Code Assist ] ( https://codeassist.google/ ) ** 、 ** [ coderabbitai] ( https://www.coderabbit.ai ) ** 、** [ Copilot] ( https://github.com/features/copilot ) ** ,用于编码与代码审查,持续优化代码质量。
22- - 👩💻 ** 开发者友好 :** 类 cJSON 接口设计,迁移成本低
23- - 📜 ** 严格但不严苛 :** 默认配置通过 ** [ RFC 8259 ] ( https://github.com/nst/JSONTestSuite ) ** 测试集;支持深层嵌套(受限于内存与平台栈配置),支持注释与尾随逗号(可配置)
22+ - 🤖 ** AI 辅助开发与审查:** 结合 ** [ Codex] ( https://openai.com/codex ) ** 、** [ coderabbitai] ( https://www.coderabbit.ai ) ** 、** [ Copilot] ( https://github.com/features/copilot ) ** ,用于编码与代码审查,持续优化代码质量。
23+ - 📜 ** 严格但不严苛 :** 默认配置通过 ** [ RFC 8259 ] ( https://github.com/nst/JSONTestSuite ) ** 测试集。
24+ - 👩💻 ** 开发者友好 :** 类 cJSON 接口设计,迁移成本低。
2425
25- ### 2、设计
26+ ## 2、设计
2627
27- ** 设计参考与语法背景**
28- - ** 借鉴:** [ json] ( https://api.gitee.com/Lamdonn/json ) 和 [ cJSON] ( https://github.com/DaveGamble/cJSON )
29- - ** 语法参考:** [ JSON 规范] ( https://www.json.org/json-en.html ) 、[ Parsing JSON is a Minefield] ( https://seriot.ch/projects/parsing_json.html )
28+ ### 设计参考与语法背景
29+ - ** 借鉴:** [ json] ( https://api.gitee.com/Lamdonn/json ) 和 [ cJSON] ( https://github.com/DaveGamble/cJSON )
30+ - ** 语法参考:** [ JSON 规范] ( https://www.json.org/json-en.html ) 、[ Parsing JSON is a Minefield] ( https://seriot.ch/projects/parsing_json.html )
3031
3132RyanJson 的核心竞争力在于对内存布局的精细控制,** 结构体表示最小存储单元(键值对)** ,通过单链表组织数据,结构如下:
3233
3334``` c
34-
3535// Json 最基础节点,所有 Json 元素都由该节点表示。
3636// 结构体仅包含固定的 next 指针,用于单向链表串联。
3737// 其余数据(如 flag/key/strValue/intValue/doubleValue/objValue 等)均通过动态内存分配管理。
@@ -143,7 +143,7 @@ struct RyanJsonNode
143143typedef struct RyanJsonNode *RyanJson_t;
144144```
145145
146- #### ✅ 核心源码与模块入口
146+ ### 核心源码与模块入口
147147- ` RyanJson/RyanJson.h ` :公开 API 与节点结构体定义
148148- ` RyanJson/RyanJsonParse.c ` :解析主流程与输入校验
149149- ` RyanJson/RyanJsonPrint.c ` :序列化输出与格式化策略
@@ -154,7 +154,7 @@ typedef struct RyanJsonNode *RyanJson_t;
154154- ` run_local_*.sh ` :本地脚本入口
155155- ` skills/shared/architecture.md ` :架构与内部实现说明(AI 入口)
156156
157- #### ✅ 目录结构速查
157+ ### 目录结构速查
158158| 目录 | 说明 |
159159| --- | --- |
160160| ` RyanJson/ ` | 核心库源码与头文件 |
@@ -166,13 +166,13 @@ typedef struct RyanJsonNode *RyanJson_t;
166166| ` build/ ` | 构建输出 |
167167| ` localLogs/ ` | 覆盖率与脚本日志输出 |
168168
169- ### 3、测试与质量保障
169+ ## 3、测试与质量保障
170170
171- ** 测试体系概览**
172- - ** 组成:** 单元测试矩阵 + 模糊测试 + QEMU 语义验证
173- - ** 目标:** 将稳定性验证前置到研发阶段
171+ ### 测试体系概览
172+ - ** 组成:** 单元测试矩阵 + 模糊测试 + QEMU 语义验证
173+ - ** 目标:** 将稳定性验证前置到研发阶段
174174
175- #### ✅ 本地测试脚本
175+ ### 本地测试脚本
176176| 脚本 | 用途 | 推荐场景 |
177177| --- | --- | --- |
178178| ` ./run_local_base.sh ` | 单元测试矩阵 | 修改测试用例后 |
@@ -182,7 +182,7 @@ typedef struct RyanJsonNode *RyanJson_t;
182182| ` ./run_local_format.sh --check ` | 格式检查 | 代码风格调整 |
183183| ` ./run_local_skills.sh ` | skills 同步与校验 | 更新文档后 |
184184
185- #### 🧪 专项功能单元测试覆盖域
185+ ### 专项功能单元测试覆盖域
186186
187187| 分组目录 | 说明 |
188188| --- | --- |
@@ -196,12 +196,12 @@ typedef struct RyanJsonNode *RyanJson_t;
196196| ` utils ` | 工具函数与辅助路径的正确性验证 |
197197| ` RFC8259 ` | RFC8259 标准样例与一致性检验 |
198198
199- #### 🛰️ QEMU 语义验证(嵌入式硬件语义)
199+ ### QEMU 语义验证(嵌入式硬件语义)
200200- 通过 QEMU 模拟 Cortex-M 语义路径,覆盖未对齐访问与 HardFault 处理等硬件级关键行为(` UNALIGN_TRP=1 ` 强制触发未对齐异常)。
201201- 面向嵌入式场景的“语义级一致性”保障,不仅是“能跑通”,更是“语义正确”。
202202- 脚本入口:` ./run_local_qemu.sh `
203203
204- #### 🔍 ** LLVM LibFuzzer 模糊测试** (核心亮点)
204+ ### LLVM LibFuzzer 模糊测试
205205
206206LLVM LibFuzzer 模糊测试是 RyanJson 的 ** 稳定性护城河** ,用于持续验证异常输入与极端边界。
207207
@@ -224,7 +224,7 @@ LLVM LibFuzzer 模糊测试是 RyanJson 的 **稳定性护城河**,用于持
224224| ** 随机压力复制安全测试** | 覆盖大规模深拷贝的内存池利用效率与拓扑安全 |
225225| ** 动态类型切换压力测试** | 覆盖运行期类型切换与动态扩展的内存安全 |
226226
227- #### 🛡️ 工具链集成
227+ ### 工具链集成
228228
229229运行时、静态分析与格式化三位一体,形成持续质量防线。
230230
@@ -234,99 +234,102 @@ LLVM LibFuzzer 模糊测试是 RyanJson 的 **稳定性护城河**,用于持
234234| ** [ clang-tidy] ( https://clang.llvm.org/extra/clang-tidy/#clang-tidy ) ** | 静态分析潜在缺陷(空指针、资源泄漏等) |
235235| ** [ Cppcheck] ( https://cppcheck.sourceforge.io/ ) ** | 深度扫描内存与资源问题 |
236236| ** [ ClangFormat] ( https://clang.llvm.org/docs/ClangFormat.html ) ** | 统一代码风格 |
237- | AI 代码审查 | ** [ Codex] ( https://openai.com/codex ) ** 、** [ Gemini Code Assist ] ( https://codeassist.google/ ) ** 、 ** [ coderabbitai] ( https://www.coderabbit.ai ) ** 、** [ Copilot] ( https://github.com/features/copilot ) ** 辅助优化逻辑,构建多层安全防线 |
237+ | AI 代码审查 | ** [ Codex] ( https://openai.com/codex ) ** 、** [ coderabbitai] ( https://www.coderabbit.ai ) ** 、** [ Copilot] ( https://github.com/features/copilot ) ** 辅助优化逻辑,构建多层安全防线 |
238238| ** 编译器警告** | ` -Wall -Wextra ` (默认)、` -Weffc++ ` /` -Weverything ` (Clang 可选,CI 强化时开启) |
239239
240- #### ✅ 当前主机侧单测基线(脚本默认)
240+ ### 当前主机侧单测基线(脚本默认)
241241- 默认构建目标:` RyanJson `
242242- 默认工具链:` clang + linux x86 ` (当前主要验证环境,见 ` xmake/host.lua ` )
243243- 默认启用:Sanitizer 与链接期安全硬化(见 ` xmake/host.lua ` )
244244
245- ### 4、基准测试
245+ ## 4、基准测试
246246
247247* 测试与示例代码见本项目根目录 ` test/ ` 和 ` example/ ` 文件夹。*
248248
249- #### 性能测试
249+ ### 性能测试
250250** 性能测试结果见 RyanDocs 文档中心(基于 [ yyjson_benchmark] ( https://github.com/ibireme/yyjson_benchmark ) ,已过时,仅供参考)。**
251251
252-
253- #### 内存占用测试
252+ ### 内存占用测试
254253RyanJson 支持按平台配置 ` malloc ` 头部空间与对齐粒度(见 ` RyanJson/RyanJsonConfig.h ` )
255254
256- - Host 报告:[ memoryUsageCompareHost .md] ( memoryUsageCompareHost .md)
257- - QEMU 报告:[ memoryUsageCompareQemu .md] ( memoryUsageCompareQemu .md)
255+ - Host 报告:[ reports/memory/host .md] ( reports/memory/host .md)
256+ - QEMU 报告:[ reports/memory/qemu .md] ( reports/memory/qemu .md)
258257
259- 生成方式:
260-
261- ```
262258测试用例代码:` test/unityTest/cases/performance/testMemory.c `
263259
260+ 生成方式:
261+
262+ ``` bash
264263bash run_local_memory.sh # 同时生成 host + qemu
265264MEM_PLATFORM=host bash run_local_memory.sh # 仅主机侧
266265MEM_PLATFORM=qemu bash run_local_memory.sh # 仅 QEMU
267266```
268267
269- #### [ RFC 8259] ( https://github.com/nst/JSONTestSuite ) 标准符合性测试
268+ ### [ RFC 8259] ( https://github.com/nst/JSONTestSuite ) 标准符合性测试
270269RFC8259 测试结果已独立输出为 Markdown 文档,避免 README 过长。
271270
272- - Host 报告:[ rfc8259ReportHost .md] ( rfc8259ReportHost .md)
273- - QEMU 报告:[ rfc8259ReportQemu .md] ( rfc8259ReportQemu .md)
271+ - Host 报告:[ reports/rfc8259/host .md] ( reports/rfc8259/host .md)
272+ - QEMU 报告:[ reports/rfc8259/qemu .md] ( reports/rfc8259/qemu .md)
274273
275- 生成方式:
274+ 测试代码入口: ` test/unityTest/cases/RFC8259/testRfc8259.c `
276275
277- ```
278- 测试代码入口:`test/unityTest/cases/RFC8259/testRfc8259.c`。
276+ 生成方式:
279277
278+ ``` bash
280279bash run_local_rfc8259.sh # 同时生成 host + qemu
281280RFC_PLATFORM=host bash run_local_rfc8259.sh # 仅主机侧
282281RFC_PLATFORM=qemu bash run_local_rfc8259.sh # 仅 QEMU
283282```
284283
285- ### 5、使用限制与注意事项
284+ ## 5、使用限制与注意事项
286285
287286- ** 数值精度** :内部使用 ` int ` / ` double ` 存储 Number。对于超过 double 精度的 64 位整数或高精度浮点数,内部使用 snprintf 打印;如果平台不支持科学计数法,建议使用 String 类型存储以避免精度丢失。
288287- ** 重复 Key** :严格模式下解析阶段拒绝重复 key;非严格模式允许重复 key,` GetObjectByKey ` /` DetachByKey ` 命中首个重复项,` DeleteByKey ` 每次删除一个,` Compare ` 在非严格模式按同 key 的出现序号对齐比较。
289288
290- ### 6、文档
291- - 📂 示例代码:` example/ ` 文件夹
292- - 📖 文档中心:RyanDocs
289+ ## 6、文档与资料
290+ - 📂 示例代码:` example/ ` 文件夹,包含创建、解析、修改等基础示例
291+ - 🧭 架构说明:` skills/shared/architecture.md ` ,补充节点布局与内部实现说明
292+ - 📊 验证报告:` reports/memory/host.md ` 、` reports/memory/qemu.md ` 、` reports/rfc8259/host.md ` 、` reports/rfc8259/qemu.md `
293+ - 🌐 在线覆盖率:< https://ryan-cw-code.github.io/RyanJson/ >
293294- 📧 联系与支持:如有任何疑问或商业合作需求,请联系:` 1831931681@qq.com `
294295
295- ### 7、快速开始
296+ ## 7、快速开始
296297
297- #### ✅ 编译工具链需要加入的文件
298+ ### 编译工具链需要加入的文件
298299- ` RyanJson/*.c ` (核心源码)
299300- ` RyanJson/RyanJson.h ` (公开 API)
300301- ` RyanJson/RyanJsonConfig.h ` (宏配置与平台差异)
301302- 头文件搜索路径加入 ` RyanJson/ `
302303
303- #### ✅ 最小初始化要求
304+ ### 最小初始化要求
304305- 在任何 JSON API 前调用 ` RyanJsonInitHooks(malloc, free, realloc) `
305306- 业务代码包含 ` #include "RyanJson.h" `
306307- 如需调整宏(例如 ` RyanJsonStrictObjectKeyCheck ` ),在包含头文件前定义或在 ` RyanJsonConfig.h ` 中配置
307308
308- #### ✅ 示例入口
309+ ### 示例入口
309310- 参考 ` example/ ` 目录的最小示例
310311
311- ### 8、AI 与知识库入口
312+ ## 8、AI 与知识库入口
312313- 使用方式:先阅读 ` AGENTS.md ` ,按问题类型进入对应技能文档,即可快速获得可落地方案。
313314- 提问建议:说明平台、宏前提、目标场景与是否需要代码示例,AI 会据此给出最短路径与稳妥的失败语义说明。
314315- 总入口与路由:` AGENTS.md `
316+ - 项目导航、构建脚本与报告路径:` skills/ryanjson-project-guide/SKILL.md `
315317- 架构与数据结构:` skills/shared/architecture.md `
316318- API 使用与所有权:` skills/ryanjson-api-usage/SKILL.md `
317319- 内部优化与语义边界:` skills/ryanjson-optimization/SKILL.md `
318320- 单元测试工程:` skills/ryanjson-test-engineering/SKILL.md `
319321
320- ### 9、贡献与验证
322+ ## 9、贡献与验证
321323
322- #### ✅ xmake 构建快速开始(主机侧)
324+ ### xmake 构建快速开始(主机侧)
323325- xmake 官网:https://xmake.io
324326- 默认验证环境:linux x86
325327- ` xmake f `
326328- ` xmake -b RyanJson `
327329
328- #### ✅ 场景与脚本建议
330+ ### 场景与脚本建议
329331按变更场景选脚本,确保修改可验证、可复现、可回归。
332+
330333| 变更场景 | 推荐脚本 |
331334| --- | --- |
332335| 仅修改单元测试用例 | ` ./run_local_base.sh ` |
0 commit comments