![ddb0fe01794940e5533d63dc5ca1ebdb.png](https://i-blog.csdnimg.cn/blog_migrate/2cfb4d7a4812aabeb5387202fd1605e7.jpeg)
用C语言yajl json库实现,构造一个json字符串。和前一篇文章(ailx10:json爬坑1:yajl解析json)正好是一个对立的操作,上一个是获得json数据,这一个是设置json数据[1]。之所以,写这个呢,是因为当时刚刚从安全云来到态势感知,领导分给我的一个独立任务,就是自己用C或者C++写一个大数据UEBA异常流量检测和分析模块。刚刚去一个星期,就要独立开发项目,啥都不懂,只能一个模块一个模块的吃,然后再想办法,把所有模块连贯起来。
一般我们从kafka直接接收到数据,解析PB就得到了Json格式的文件,然后我们处理这批数据。处理完之后,我们要上报安全事件,这里就需要将数据在组装成Json格式,然后写到Kafka中,所以我调研了一下C语言如何写Json。
但是为什么要选择yajl呢,实际上有很多选择,但是当时我咨询了一个安全云的大牛,他说咱们开发的WAF里面用的是yajl这个库,于是我就自己研究了一下,就是这样的~
我下载了yajl的库,然后编译,这里采用静态链接库编译,就得到了可执行程序,感觉还可以,最后我就用到了代码里。
gcc myjsonn.c ../build/yajl-2.1.1/lib/libyajl_s.a
![b7d0c16e2a6e9bc5477c6a2753e0daa9.png](https://i-blog.csdnimg.cn/blog_migrate/68a05bb0a0de1f851b485f999ccb7df4.png)
设置JSON字段的C接口,这些都是YAJL_API
官方库统一的,没啥好说的。
- 整数
- 浮点数
- 字符串
- 空值
- 布尔
- 字典
- 数组
YAJL_API yajl_gen_status yajl_gen_integer(yajl_gen hand, long long int number);
YAJL_API yajl_gen_status yajl_gen_double(yajl_gen hand, double number);
YAJL_API yajl_gen_status yajl_gen_number(yajl_gen hand,const char * num,size_t len);
YAJL_API yajl_gen_status yajl_gen_string(yajl_gen hand,const unsigned char * str,size_t len);
YAJL_API yajl_gen_status yajl_gen_null(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_bool(yajl_gen hand, int boolean);
YAJL_API yajl_gen_status yajl_gen_map_open(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_map_close(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_array_open(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_array_close(yajl_gen hand);
- 代码删掉了,自己百度去吧
- 代码删掉了,自己百度去吧
- 代码删掉了,自己百度去吧
参考
- ^yajl构造json https://blog.csdn.net/kyle__shaw/article/details/36442141