从零开始的Jason(一)
来源:互联网 发布:淘宝客网站推广教程 编辑:程序博客网 时间:2024/05/16 02:42
最近关注了叶劲锋大大的知乎专栏“
实现一个简易的Json库需求:
解析API:
当中 %xhh 表示以 16 进制表示的字符,/ 是多选一,* 是零或多个,( ) 用于分组。
在这个 JSON 语法子集下,我们定义 3 种错误码:
若一个 JSON 只含有空白,传回 LEPT_PARSE_EXPECT_VALUE。
若一个值之后,在空白之后还有其他字符,传回 LEPT_PARSE_ROOT_NOT_SINGULAR。
若值不是那三种字面值,传回 LEPT_PARSE_INVALID_VALUE。
从零开始的 JSON 库教程”,主要做一些笔记
JSON是什么?
JSON(JavaScript Object Notation)是一个用于数据交换的文本格式,现时的标准为ECMA-404。
先来看一个Jason结构:
{ "title": "Design Patterns", "subtitle": "Elements of Reusable Object-Oriented Software", "author": [ "Erich Gamma", "Richard Helm", "Ralph Johnson", "John Vlissides" ], "year": 2009, "weight": 1.8, "hardcover": true, "publisher": { "Company": "Pearson Education", "Country": "India" }, "website": null
}
实现一个简易的Json库需求:
把 JSON 文本解析为一个树状数据结构(parse)。
提供接口访问该数据结构(access)。
把数据结构转换成 JSON 文本(stringify)。
API:
JSON中数据类型设计:
typedef enum { LEPT_NULL, LEPT_FALSE, LEPT_TRUE, LEPT_NUMBER, LEPT_STRING, LEPT_ARRAY, LEPT_OBJECT } lept_type;
JSON树状结构初始设计:
typedef struct { lept_type type; }lept_value;
解析API:
int lept_parse(lept_value* v, const char* json);
enum { LEPT_PARSE_OK = 0, LEPT_PARSE_EXPECT_VALUE, LEPT_PARSE_INVALID_VALUE, LEPT_PARSE_ROOT_NOT_SINGULAR};
lept_type lept_get_type(const lept_value* v);
JSON 语法子集,使用 RFC7159 中的 ABNF 表示:
JSON-text = ws value wsws = *(%x20 / %x09 / %x0A / %x0D)value = null / false / true null = "null"false = "false"true = "true"
当中 %xhh 表示以 16 进制表示的字符,/ 是多选一,* 是零或多个,( ) 用于分组。
在这个 JSON 语法子集下,我们定义 3 种错误码:
若一个 JSON 只含有空白,传回 LEPT_PARSE_EXPECT_VALUE。
若一个值之后,在空白之后还有其他字符,传回 LEPT_PARSE_ROOT_NOT_SINGULAR。
若值不是那三种字面值,传回 LEPT_PARSE_INVALID_VALUE。
单元测试:
c++ 有 gtest。叶大采用的是简易的测试
附叶大教程
阅读全文
0 0
- 从零开始的Jason(一)
- 从零开始的webpack(一)
- 从零开始的JAVA【一】
- SQL从零开始(一)
- Tomcat从零开始(一)
- HTML5从零开始(一)
- clojure从零开始(一)
- Openwrt从零开始(一)
- mysql从零开始(一)
- Android从零开始(一)
- Java从零开始(一)
- RxJava从零开始(一)
- Beam从零开始(一)
- Netty从零开始(一)
- PyTorch从零开始(一):
- Beam从零开始(一)
- (一)java从零开始
- OFBiz + Opentaps 目录管理 四. 产品(一)定义产品 - Jason的个人空间 - 开源中国社区
- 简单除法和求余
- 大家都知道斐波那契数列现在要求输入一个整数n请你输出斐波那契数列的第n项。例如n<=39
- [EMWIN]不同窗口的ID实验 [待完善]
- 动态规划(DP)-装配线调度问题
- ps画图,光增强立体感
- 从零开始的Jason(一)
- 浅谈Glide图片缓存
- 20171031
- FreeRTOS的Tickless低功耗源码分析
- java中的单例模式与doublecheck
- 用格雷戈里公式求π的近似值
- DES
- Python IDLE 运行错误:Subprocess Startup Error
- 关于Python对简单的web框架flask的应用使得不只是本机而是局域网都能访问