[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6328":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},6328,"json-tutorial","miloyip\u002Fjson-tutorial","miloyip","从零开始的 JSON 库教程","https:\u002F\u002Fzhuanlan.zhihu.com\u002Fjson-tutorial",null,"C",7937,4294,202,95,0,1,8,41,false,"master",true,[],"2026-06-12 02:01:18","# 从零开始的 JSON 库教程\n\n* Milo Yip\n* 2016\u002F9\u002F15\n\n也许有很多同学上过 C\u002FC++ 的课后，可以完成一些简单的编程练习，又能在一些网站刷题，但对于如何开发有实际用途的程序可能感到束手无策。本教程希望能以一个简单的项目开发形式，让同学能逐步理解如何从无到有去开发软件。\n\n为什么选择 JSON？因为它足够简单，除基本编程外不需大量技术背景知识。JSON 有标准，可按照标准逐步实现。JSON 也是实际在许多应用上会使用的格式，所以才会有大量的开源库。\n\n这是一个免费、开源的教程，如果你喜欢，也可以打赏鼓励。因为工作及家庭因素，不能保证每篇文章的首发时间，请各位见谅。\n\n## 对象与目标\n\n教程对象：学习过基本 C\u002FC++ 编程的同学。\n\n通过这个教程，同学可以了解如何从零开始写一个 JSON 库，其特性如下：\n\n* 符合标准的 JSON 解析器和生成器\n* 手写的递归下降解析器（recursive descent parser）\n* 使用标准 C 语言（C89）\n* 跨平台／编译器（如 Windows／Linux／OS X，vc／gcc／clang）\n* 仅支持 UTF-8 JSON 文本\n* 仅支持以 `double` 存储 JSON number 类型\n* 解析器和生成器的代码合共少于 500 行\n\n除了围绕 JSON 作为例子，希望能在教程中讲述一些课题：\n\n* 测试驱动开发（test driven development, TDD）\n* C 语言编程风格\n* 数据结构\n* API 设计\n* 断言\n* Unicode\n* 浮点数\n* Github、CMake、valgrind、Doxygen 等工具\n\n## 教程大纲\n\n本教程预计分为 9 个单元，第 1-8 个单元附带练习和解答。\n\n1. [启程](tutorial01\u002Ftutorial01.md)（2016\u002F9\u002F15 完成）：编译环境、JSON 简介、测试驱动、解析器主要函数及各数据结构。练习 JSON 布尔类型的解析。[启程解答篇](tutorial01_answer\u002Ftutorial01_answer.md)（2016\u002F9\u002F17 完成）。\n2. [解析数字](tutorial02\u002Ftutorial02.md)（2016\u002F9\u002F18 完成）：JSON number 的语法。练习 JSON number 类型的校验。[解析数字解答篇](tutorial02_answer\u002Ftutorial02_answer.md)（2016\u002F9\u002F20 完成）。\n3. [解析字符串](tutorial03\u002Ftutorial03.md)（2016\u002F9\u002F22 完成）：使用 union 存储 variant、自动扩展的堆栈、JSON string 的语法、valgrind。练习最基本的 JSON string 类型的解析、内存释放。[解析字符串解答篇](tutorial03_answer\u002Ftutorial03_answer.md)（2016\u002F9\u002F27 完成）。\n4. [Unicode](tutorial04\u002Ftutorial04.md)（2016\u002F10\u002F2 完成）：Unicode 和 UTF-8 的基本知识、JSON string 的 unicode 处理。练习完成 JSON string 类型的解析。[Unicode 解答篇](tutorial04_answer\u002Ftutorial04_answer.md)（2016\u002F10\u002F6 完成）。\n5. [解析数组](tutorial05\u002Ftutorial05.md)（2016\u002F10\u002F7 完成）：JSON array 的语法。练习完成 JSON array 类型的解析、相关内存释放。[解析数组解答篇](tutorial05_answer\u002Ftutorial05_answer.md)（2016\u002F10\u002F13 完成）。\n6. [解析对象](tutorial06\u002Ftutorial06.md)（2016\u002F10\u002F29 完成）：JSON object 的语法、重构 string 解析函数。练习完成 JSON object 的解析、相关内存释放。[解析对象解答篇](tutorial06_answer\u002Ftutorial06_answer.md)（2016\u002F11\u002F15 完成）。\n7. [生成器](tutorial07\u002Ftutorial07.md)（2016\u002F12\u002F20 完成）：JSON 生成过程、注意事项。练习完成 JSON 生成器。[生成器解答篇](tutorial07_answer\u002Ftutorial07_answer.md)（2017\u002F1\u002F5 完成）。\n8. [访问与其他功能](tutorial08\u002Ftutorial08.md)（2018\u002F6\u002F2 完成）：JSON array／object 的访问及修改。练习完成相关功能。\n9. 终点及新开始：加入 nativejson-benchmark 测试，与 RapidJSON 对比及展望。\n\n## 关于作者\n\n叶劲峰（Milo Yip）现任腾讯 T4 专家、互动娱乐事业群魔方工作室群游戏客户端技术总监。他获得香港大学认知科学学士（BCogSc）、香港中文大学系统工程及工程管理哲学硕士（MPhil）。他是《游戏引擎架构》译者、《C++ Primer 中文版（第五版）》审校。他曾参与《天涯明月刀》、《斗战神》、《爱丽丝：疯狂回归》、《美食从天降》、《王子传奇》等游戏项目，以及多个游戏引擎及中间件的研发。他是开源项目 [RapidJSON](https:\u002F\u002Fgithub.com\u002Fmiloyip\u002Frapidjson) 的作者，开发 [nativejson-benchmark](https:\u002F\u002Fgithub.com\u002Fmiloyip\u002Fnativejson-benchmark) 比较 41 个开源原生 JSON 库的标准符合程度及性能。他在 1990 年学习 C 语言，1995 年开始使用 C++ 于各种项目。\n","该项目是一个从零开始的 JSON 库教程，旨在帮助学习过基本 C\u002FC++ 编程的同学逐步理解并实践软件开发过程。核心功能包括符合标准的 JSON 解析器和生成器，采用手写的递归下降解析方法，使用标准 C 语言（C89），支持跨平台\u002F编译器，并且仅支持 UTF-8 JSON 文本与以 `double` 存储 JSON number 类型。整个项目强调测试驱动开发、良好的编程风格、数据结构设计等关键技能的学习。该教程适合那些希望深入了解 C 语言实际应用以及如何构建小型但实用的库的学生或开发者参考。通过跟随此教程，读者不仅能掌握 JSON 处理技术，还能学到关于 API 设计、断言使用、Unicode 和浮点数处理等重要概念，同时熟悉如 Github、CMake、valgrind 和 Doxygen 等工具的应用。",2,"2026-06-11 03:06:29","top_language"]