CHAPTER 08
JsonObjectView JSON 视图
对应文件:
- 接口:
include/JsonObjectView.h - 实现:头文件内联(无独立
cpp)
1. 模块定位
JsonObjectView 是 JsonValue 的轻量包装器,目标是:
- 一次解析 JSON 后,使用
operator[]链式访问 - 为调用层提供更直观的数据读取体验
- 在需要遍历 object 时导出
unordered_map
2. 核心接口
static parse(json):从文本解析为视图operator[](key):键访问,返回子视图raw()/copy():获取底层JsonValueasString()/asInt()/asNumber()isObject()asUnorderedMap()
3. 访问语义
3.1 operator[]
- 仅当当前节点是
OBJECT时才按键查询 - 非对象节点或键不存在时返回空视图(默认构造)
3.2 asString
- 若节点是字符串,返回原字符串
- 其他类型返回
toJson()序列化结果
3.3 asInt/asNumber
- 节点为数字时直接转换
- 节点为字符串时尝试
stoi/stod - 转换失败返回默认值
4. 与 JsonValue 的关系
JsonObjectView不替代JsonValue- 它是一个“访问友好层”,底层解析与序列化仍依赖
JsonValue
5. 适用场景
- 读取 API 返回 JSON 的少量关键字段
- 业务层快速链式读取,减少重复类型判断代码
6. 风险与建议
operator[]每次调用会复制asObject()返回值,深层链式访问存在额外复制成本- 可改为内部持有指针/引用视图以减少拷贝
asUnorderedMap仅浅层导出- 若需要复杂查询可补 JSONPath 或递归遍历工具