共计 1473 个字符,预计需要花费 4 分钟才能阅读完成。
Workflow中有一个小而美的json-parser,一千行代码写得十分典雅粗劣。不仅能够学习到经典的 C 语言写法、递归解析的架构、与内核近似的编码格调、简洁的接口设计,而且也十分不便引入我的项目中作为轻量级的 json 解析器。因为是开源我的项目 Workflow 的子模块之一,所以代码品质和开源我的项目的长期投入都有保障~~~
围观地址:
https://github.com/Barenboim/…
1、基于ANSI-C
,残缺反对ECMA-404
json 规范;
2、轻量级 :只有json_parser.h
和json_parser.c
,依赖只有 linux 内核中的两个经典数据结构 rbtree.h
和list.h
;
3、高性能 :尽管不是最快的,但实测性能大略是cJSON
的1.5
倍,jsoncpp
的 10
倍左右;
4、接口简洁 ,执行make
命令就能够间接把现成的可执行文件 parse_json 和 test_speed 编译进去,Windows 下也能够用。能够围观下 test.c 里的用法指南:
int main ()
{ ...
json_value_t *val = json_value_parse(buf); // 解析 json 文档产生 json value
if (val)
{print_json_value(val, 0);
json_value_destroy(val); // 销毁 json value
}
...
5、C 中面向对象的写法,以及相熟的 linux kernel编码格调,比拟赏心悦目:
/* 从 json value 中取得 string */
const char *json_value_string(const json_value_t *val);
/* 从 json value 中取得 num */
double json_value_number(const json_value_t *val);
/* 从 json value 中取得 json object */
json_object_t *json_value_object(const json_value_t *val);
/* 返回 object 大小 */
int json_object_size(const json_object_t *obj);
/* 查找 name 下的 value。返回 json value 对象 */
const json_value_t *json_object_find(const char *name, const json_object_t *obj);
/* 遍历 json object。这不是一个函数,是一个开展成一个 for 循环的宏 */
json_object_for_each(name, val, obj)
6、外部典雅的 递归解析架构:
用户入口 json_value_t *json_value_create(const char *doc)
会进入到递归入口__parse_json_value(doc, &doc, 0, val);
,而后递归地对 json 中能够嵌套的数组、对象的关系装到 list/rbtree 中。
Workflow 是一个企业级、轻量且高性能的异步调度框架,创新性引入工作流解决异步难题。其中 kernel 目录下也还有许多相似这个 json parser 这样的独立小模块,不仅有根本的 IO 多路复用、线程池、音讯队列实现,还有与 event loop 不一样的 epoll/kqueue 新玩法:
GitHub – sogou/workflow: C++ Parallel Computing and Asynchronous Networking Engine
每一个模块都不大,且独自拎进去跑都很好玩,感兴趣的话也能够围观~~~