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
每一个模块都不大,且独自拎进去跑都很好玩,感兴趣的话也能够围观~~~