介绍
优质
小牛编辑
143浏览
2023-12-01
也许有很多同学上过 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 个单元附带练习和解答。
- 15913(2016/9/15 完成):编译环境、JSON 简介、测试驱动、解析器主要函数及各数据结构。练习 JSON 布尔类型的解析。15914(2016/9/17 完成)。
- 15915(2016/9/18 完成):JSON number 的语法。练习 JSON number 类型的校验。15916(2016/9/20 完成)。
- 15917(2016/9/22 完成):使用 union 存储 variant、自动扩展的堆栈、JSON string 的语法、valgrind。练习最基本的 JSON string 类型的解析、内存释放。15918(2016/9/27 完成)。
- 15919(2016/10/2 完成):Unicode 和 UTF-8 的基本知识、JSON string 的 unicode 处理。练习完成 JSON string 类型的解析。15920(2016/10/6 完成)。
- 15921(2016/10/7 完成):JSON array 的语法。练习完成 JSON array 类型的解析、相关内存释放。15922(2016/10/13 完成)。
- 15923(2016/10/29 完成):JSON object 的语法、重构 string 解析函数。练习完成 JSON object 的解析、相关内存释放。15924(2016/11/15 完成)。
- 15925(2016/12/20 完成):JSON 生成过程、注意事项。练习完成 JSON 生成器。15926(2017/1/5 完成)
- 访问:JSON array/object 的访问及修改。练习完成相关功能。
- 终点及新开始:加入 nativejson-benchmark 测试,与 RapidJSON 对比及展望。