从零开始的 JSON 库教程 笔记

这篇博客是跟随Milo Yip的从零开始的JSON库教程的学习笔记,涵盖了JSON库的基本概念、编译环境搭建、头文件与API设计、JSON语法子集、单元测试、宏编写技巧等内容。教程旨在实现解析、访问和转换JSON的功能,目前包括解析null、boolean和数字的实现。博客还探讨了测试驱动开发和断言的使用,以及数字解析的细节。
摘要由CSDN通过智能技术生成

注:好记性不如烂笔头,在看Milo Yip 的从零开始的 JSON 库教程,学习下编程技术,把在学习过程中遇到的自己觉得很有意思的地方给记录了下来,基本是 ctrl + c ctrl + v。所以如果需要看他的教程学习的同学,请移步https://zhuanlan.zhihu.com/json-tutorial

从零开始的 JSON 库教程(一):启程


作者:Milo Yip
链接:https://zhuanlan.zhihu.com/p/22460835
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我们要实现的 JSON 库,主要是完成 3 个需求:

把 JSON 文本解析为一个树状数据结构(parse)。
提供接口访问该数据结构(access)。
把数据结构转换成 JSON 文本(stringify)。

在本单元中,我们只实现最简单的 null 和 boolean 解析。

JSON 是什么

JSON 是树状结构,而 JSON 只包含 6 种数据类型:

  1. null: 表示为 null
  2. boolean: 表示为 true 或 false
  3. number: 一般的浮点数表示方式,在下一单元详细说明
  4. string: 表示为 “…”
  5. array: 表示为 [ … ]
  6. object: 表示为 { … }

我们要实现的 JSON 库,主要是完成 3 个需求:

  1. 把 JSON 文本解析为一个树状数据结构(parse)。
  2. 提供接口访问该数据结构(access)。
  3. 把数据结构转换成 JSON 文本(stringify)。

leptjson function

搭建编译环境

头文件与 API 设计

C 语言有头文件的概念,需要使用 #include去引入头文件中的类型声明和函数声明。但由于头文件也可以 #include 其他头文件,为避免重复声明,通常会利用宏加入 include 防范(include guard)

#ifndef LEPTJSON_H__
#define LEPTJSON_H__

/* ... */

#endif /* LEPTJSON_H__ */

宏的名字必须是唯一的,通常习惯以 _H__ 作为后缀。由于 leptjson 只有一个头文件,可以简单命名为 LEPTJSON_H__。如果项目有多个文件或目录结构,可以用 项目名称_目录_文件名称_H__ 这种命名方式。

JSON 语法子集

下面是此单元的 JSON 语法子集,使用 RFC7159 中的 ABNF 表示:

JSON-text = ws value ws
ws = *(%x20 / %x09 / %x0A / %x0D)
value = null / false / true 
null  = "null"
false = "false"
true  = "true"

当中 %xhh 表示以 16 进制表示的字符,/ 是多选一,* 是零或多个,() 用于分组。

单元测试

M大关于单元测试的讲解&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值