ryanjson-optimization,测试回归问题转 ryanjson-test-engineering。RyanJsonInitHooks 在任何 Json API 前执行。RyanJsonStrictObjectKeyCheck、RyanJsonDefaultAddAtHead。| 用户意图 | 推荐路径 | 是否改结构 | 关键风险 |
|---|---|---|---|
| 读取配置字段 | Parse + Get + IsXXX | 否 | 未判型直接取值 |
| 周期上报/打包发送 | Create + Add + PrintPreallocated | 是 | 缓冲不足或清理遗漏 |
| 在线改值(同类型) | Get + Change*Value | 否 | 把跨类型更新误写成 Change |
| 字段类型切换 | Create* + ReplaceBy* | 是 | Replace 失败后 newItem 泄漏 |
| 子树迁移/重排 | Detach* + Add/Insert | 是 | detach 后未接管 |
| 重复 key 策略切换 | 宏配置 + 业务校验同步 | 视需求 | 宏与测试预期不一致 |
| 传输压缩输出 | Print(format=false) | 否 | 误把 Minify 当传输主路径 |
| 历史文本清洗 | Minify | 否 | \0 终止符假设错误 |
RyanJsonInitHooksRyanJsonParseRyanJsonGetObjectByKeyRyanJsonIsXXX 后再 RyanJsonGetXXXValueRyanJsonDelete(root)Parse == NULL:输入非法或资源不足,可恢复错误。RyanJsonCreateObjectRyanJsonAdd*ToObjectRyanJsonPrintPreallocated(..., RyanJsonFalse, ...)RyanJsonDelete(root)Change*Value。ReplaceByKey/ReplaceByIndex。int -> object、string -> array。newItemRyanJsonReplaceByKey/ByIndexRyanJsonDelete(newItem)Replace 失败不消费 newItem,不能套用 Add/Insert 失败语义。detached = RyanJsonDetachByKey/ByIndexRyanJsonAddItem* / RyanJsonInsertdetached 所有权RyanJsonStrictObjectKeyCheck=true:重复 key 更严格。RyanJsonStrictObjectKeyCheck=false:兼容性更高,但 key 查询可预测性下降。RyanJsonPrint(..., RyanJsonFalse, ...),发送后 RyanJsonFree(str)。RyanJsonPrintPreallocated(..., RyanJsonFalse, ...)。format=false,不要默认走 Minify。ret = RyanJsonMinify(buf, textLen)ret < textLen 才可直接按 C 字符串使用Minify 是文本清洗工具,不是传输输出主路径。GetXXXValue。Replace 失败当成库自动清理。RyanJsonDefaultAddAtHead 导致索引/遍历顺序误判。RyanJson/RyanJsonItem.c:Add/Insert/Replace/Detach 失败与所有权路径RyanJson/RyanJson.c:RyanJsonMinify 行为test/unityTest/cases/core/testCreate.c:Add/Insert/Detach 相关断言test/unityTest/cases/core/testReplace.c:Replace 失败不消费 itemtest/unityTest/cases/utils/testPrint.c:非格式化打印与 preallocated 边界test/unityTest/cases/utils/testUtils.c、test/unityTest/cases/utils/testRobust.c、test/fuzzer/cases/fuzzerMinify.c:Minify 边界与稳健性