关于workflow:Workflow的json-parser实现

53次阅读

共计 1473 个字符,预计需要花费 4 分钟才能阅读完成。

Workflow中有一个小而美的json-parser,一千行代码写得十分典雅粗劣。不仅能够学习到经典的 C 语言写法、递归解析的架构、与内核近似的编码格调、简洁的接口设计,而且也十分不便引入我的项目中作为轻量级的 json 解析器。因为是开源我的项目 Workflow 的子模块之一,所以代码品质和开源我的项目的长期投入都有保障~~~

围观地址:
https://github.com/Barenboim/…

1、基于ANSI-C,残缺反对ECMA-404 json 规范;

2、轻量级 :只有json_parser.hjson_parser.c,依赖只有 linux 内核中的两个经典数据结构 rbtree.hlist.h

3、高性能 :尽管不是最快的,但实测性能大略是cJSON1.5倍,jsoncpp10 倍左右;

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

每一个模块都不大,且独自拎进去跑都很好玩,感兴趣的话也能够围观~~~

正文完
 0