Workflow的JSON解析器

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

每一个模块都不大,且单独拎出来跑都很好玩,感兴趣的话也可以围观~~~

开源框架Workflow/srpc开发者♥架构鶸一只

19 声望
9 粉丝
0 条评论
推荐阅读
快速入门SRPC
开源2年半了,一直都还没给SRPC系统地写过什么文章。趁着最近发布了srpc构建小工具,也给SRPC写几篇交流学习文档,希望单独的每一篇都能让不同程度的小伙伴有所收获~~~

1412阅读 45

封面图
祝贺姜宁连任 2023 Apache 软件基金会董事
在刚刚结束的 ASF Annual Meeting 上,2023 年新任董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。

鸣飞4阅读 7.2k评论 1

姜宁 ASF 2022 董事竞选宣言:我希望能够帮助 ASF 打破地域、文化、语言的障碍
在刚刚结束的 ASF Annual Meeting 上,2022 年新任 ASF Member 及董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。Apache 软件基金会孵化器导师,ALC Beijing 发起人,华为...

鸣飞4阅读 12.3k

封面图
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...

码哥字节6阅读 1.8k

封面图
张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1k评论 2

封面图
C 程序眼中的 Unicode
去年写了一篇文章「在 C 程序中处理 UTF-8 字符串」,介绍了如何使用 GLib 提供的 UTF-8 字符串处理函数来实现基本的 UTF-8 文本处理。不过,GLib 是一个功能比较全面的 C 程序库,C 字符串处理仅仅是它的一个很...

garfileo3阅读 5.8k评论 5

阿里云被曝 UI 抄袭,复刻 SkyWalking Trace Profiling 页面
2023 年 1 月 3 日,SkyWalking 官网发布消息,称阿里云抄袭了 SkyWalking Trace Profiling 整体页面 UI,包括页面布局、文字和分析任务设置,唯一的区别仅有颜色方案。

鸣飞5阅读 5.3k

开源框架Workflow/srpc开发者♥架构鶸一只

19 声望
9 粉丝
宣传栏