Skip to content

zhangliang1997/json-tutorial

This branch is 12 commits behind miloyip/json-tutorial:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

db7fa38 · May 28, 2019
Oct 22, 2018
Aug 30, 2018
May 27, 2019
Sep 3, 2018
Sep 3, 2018
Sep 3, 2018
Oct 15, 2018
Sep 7, 2018
Sep 7, 2018
Nov 28, 2018
Sep 8, 2018
Sep 7, 2018
Sep 9, 2018
Sep 9, 2018
Sep 3, 2018
Sep 15, 2016
Sep 2, 2018

Repository files navigation

从零开始的 JSON 库教程

  • Milo Yip
  • 2016/9/15

也许有很多同学上过 C/C++ 的课后,可以完成一些简单的编程练习,又能在一些网站刷题,但对于如何开发有实际用途的程序可能感到束手无策。本教程希望能以一个简单的项目开发形式,让同学能逐步理解如何从无到有去开发软件。

为什么选择 JSON?因为它足够简单,除基本编程外不需大量技术背景知识。JSON 有标准,可按照标准逐步实现。JSON 也是实际在许多应用上会使用的格式,所以才会有大量的开源库。

这是一个免费、开源的教程,如果你喜欢,也可以打赏鼓励。因为工作及家庭因素,不能保证每篇文章的首发时间,请各位见谅。

对象与目标

教程对象:学习过基本 C/C++ 编程的同学。

通过这个教程,同学可以了解如何从零开始写一个 JSON 库,其特性如下:

  • 符合标准的 JSON 解析器和生成器
  • 手写的递归下降解析器(recursive descent parser)
  • 使用标准 C 语言(C89)
  • 跨平台/编译器(如 Windows/Linux/OS X,vc/gcc/clang)
  • 仅支持 UTF-8 JSON 文本
  • 仅支持以 double 存储 JSON number 类型
  • 解析器和生成器的代码合共少于 500 行

除了围绕 JSON 作为例子,希望能在教程中讲述一些课题:

  • 测试驱动开发(test driven development, TDD)
  • C 语言编程风格
  • 数据结构
  • API 设计
  • 断言
  • Unicode
  • 浮点数
  • Github、CMake、valgrind、Doxygen 等工具

教程大纲

本教程预计分为 9 个单元,第 1-8 个单元附带练习和解答。

  1. 启程(2016/9/15 完成):编译环境、JSON 简介、测试驱动、解析器主要函数及各数据结构。练习 JSON 布尔类型的解析。启程解答篇(2016/9/17 完成)。
  2. 解析数字(2016/9/18 完成):JSON number 的语法。练习 JSON number 类型的校验。解析数字解答篇(2016/9/20 完成)。
  3. 解析字符串(2016/9/22 完成):使用 union 存储 variant、自动扩展的堆栈、JSON string 的语法、valgrind。练习最基本的 JSON string 类型的解析、内存释放。解析字符串解答篇(2016/9/27 完成)。
  4. Unicode(2016/10/2 完成):Unicode 和 UTF-8 的基本知识、JSON string 的 unicode 处理。练习完成 JSON string 类型的解析。Unicode 解答篇(2016/10/6 完成)。
  5. 解析数组(2016/10/7 完成):JSON array 的语法。练习完成 JSON array 类型的解析、相关内存释放。解析数组解答篇(2016/10/13 完成)。
  6. 解析对象(2016/10/29 完成):JSON object 的语法、重构 string 解析函数。练习完成 JSON object 的解析、相关内存释放。解析对象解答篇(2016/11/15 完成)。
  7. 生成器(2016/12/20 完成):JSON 生成过程、注意事项。练习完成 JSON 生成器。生成器解答篇(2017/1/5 完成)。
  8. 访问与其他功能(2018/6/2 完成):JSON array/object 的访问及修改。练习完成相关功能。
  9. 终点及新开始:加入 nativejson-benchmark 测试,与 RapidJSON 对比及展望。

关于作者

叶劲峰(Milo Yip)现任腾讯 T4 专家、互动娱乐事业群魔方工作室群游戏客户端技术总监。他获得香港大学认知科学学士(BCogSc)、香港中文大学系统工程及工程管理哲学硕士(MPhil)。他是《游戏引擎架构》译者、《C++ Primer 中文版(第五版)》审校。他曾参与《天涯明月刀》、《斗战神》、《爱丽丝:疯狂回归》、《美食从天降》、《王子传奇》等游戏项目,以及多个游戏引擎及中间件的研发。他是开源项目 RapidJSON 的作者,开发 nativejson-benchmark 比较 41 个开源原生 JSON 库的标准符合程度及性能。他在 1990 年学习 C 语言,1995 年开始使用 C++ 于各种项目。

About

从零开始的 JSON 库教程

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 98.5%
  • CMake 1.4%
  • Makefile 0.1%