JsonObjectView JSON 视图
C++ 后端服务器框架JsonObjectView JSON 视图
CHAPTER 08

JsonObjectView JSON 视图

2 分钟阅读 · 360 字

对应文件:

  • 接口:include/JsonObjectView.h
  • 实现:头文件内联(无独立 cpp)

1. 模块定位

JsonObjectView 是 JsonValue 的轻量包装器,目标是:

  • 一次解析 JSON 后,使用 operator[] 链式访问
  • 为调用层提供更直观的数据读取体验
  • 在需要遍历 object 时导出 unordered_map

2. 核心接口

  • static parse(json):从文本解析为视图
  • operator[](key):键访问,返回子视图
  • raw()/copy():获取底层 JsonValue
  • asString()/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 或递归遍历工具
全部章节