RapidJSON 源码剖析(0):关于 RapidJSON

为什么会有《RapidJSON 源码剖析》系列博文?

《RapidJSON 源码剖析》系列博文相当于是对 Technique to Read Source Code 的注脚,具体地展现出阅读源码的真实案例。

本系列文章以 “整体(本文) — 局部 — 整体” 的结构, 对 RapidJSON 源码进行较为深入地阅读。

什么是 RapidJSON ?

关于 RapidJSON

RapidJSON 是腾讯开源的一个 C++JSON 解析器及生成器。腾讯给的官方文档RapidJSON 有下列描述:

  • RapidJSON 小而全。它同时支持 SAXDOM 风格的 APISAX 解析器只有约 500 行代码。
  • RapidJSON 快。它的性能可与 strlen() 相比。可支持 SSE2/SSE4.2 加速。
  • RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至不依赖于 STL
  • RapidJSON 对内存友好。在大部分 32/64 位机器上,每个 JSON 值只占 16 字节(除字符串外)。它预设使用一个快速的内存分配器,令分析器可以紧凑地分配内存。
  • RapidJSONUnicode 友好。它支持 UTF-8UTF-16UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate pair)及 "\u0000"(空字符)。

RapidJSON 文档比较完善, 其主要文档在这里
RapidJson 的代码都在头文件中,因此使用时只需要包含其头文件就可以了。源代码地址在这里

为什么是 RapidJSON

  • RapidJSON 代码量小,不依赖其他库的特点对刚开始学习阅读源码的萌新比较友好。
  • RapidJSON 代码美观,注释详细,应该能够潜移默化地影响阅读者的代码软实力。
  • RapidJSON 文档完善,可以检验代码阅读者的理解是否符合原 Coder 的想法。

RapidJSON 的架构

n_pbfunc_json 解析json rapidjson解析json_字符串

上图引用自 RapidJSON 官方文档。该文档对 RapidJSON 的使用和设计都有一定的介绍。

从图中可以看到 SAXDOM 两部分是相对独立的模块。 本系列博文也会大概按照该架构图的模块划分来布局。

参考文档