为了支持内置的consul client,项目里实现了基于标准C(C99)的高性能JSON解析器。
json value相关接口
/* 解析json文档产生json value。返回json value对象。返回NULL代表解析失败(格式不标准,嵌套过深,分配内存失败)
@doc 文档字符串 */
json_value_t *json_value_parse(const char *doc);
/* 销毁json value
@val json value对象。一般由parse函数产生。*/
void json_value_destroy(json_value_t *val);
/* 返回json value类型
可能的返回值:
JSON_VALUE_STRING:字符串
JSON_VALUE_NUMBER:数字
JSON_VALUE_OBJECT:json对象
JSON_VALUE_ARRAY:json数组
JSON_VALUE_TRUE:true
JSON_VALUE_FALSE:false
JSON_VALUE_NULL:null
@val:json value对象 */
int json_value_type(const json_value_t *val);
/* 获得json string。返回string地址。如果返回NULL,代表value不是STRING型。
@val:json value对象 */
const char *json_value_string(const json_value_t *val);
/* 获得json number。返回数值。如果value不是NUMBER型,返回NAN(不存在的浮点数)。
@val:json value对象 */
double json_value_number(const json_value_t *val);
/* 获得json object。返回object对象。如果value不是OBJECT类型,返回NULL。
@val:json value对象
注意返回的json_object_t指针并非const。可以通过build相关函数扩展object。*/
json_object_t *json_value_object(const json_value_t *val);
/* 获得json array。返回array对象。如果value不是ARRAY类型,返回NULL。
@val:json value对象
同样,返回的json_array_t指针不带const。 */
json_array_t *json_value_array(const json_value_t *val);
json object相关接口
/* 返回object的大小。即object包含的name,value对数量。
@obj:json object对象 */
int json_object_size(const json_object_t *obj);
/* 查找name下的value。返回json value对象。返回NULL代表找不到这个name。函数时间复杂度为O(size)。
@name:要查找的名字
@obj:json object对象
注意返回的json_value_t指针带const。*/
const json_value_t *json_object_find(const char *name, const json_object_t *obj);
/* 遍历json object。
@name:临时的const char *类型name字符串
@val:临时的const json_value_t *类型的json value对象
@obj:json object对象
这不是一个函数,是一个展开成一个for循环的宏。 */
json_object_for_each(name, val, obj)
json array相关接口
/* 返回json array的大小,即元素个数。
@arr:json array对象 */
int json_array_size(const json_array_t *arr);
/* 遍历json array
@val:临时的const json_value_t *类型的json value对象
@arr:json array对象
同样,这是一个展开成for循环的宏。 */
json_array_for_each(val, arr)
build接口
请直接参考源代码。
示例
使用示例大家可以到这个独立repo上看一下:
https://github.com/barenboim/json-parser
目前workflow的master分支,包括了这个json paser。所以,只需在代码里直接引用就可以了。
Benchmark
实测parse性能大概是cJSON的2倍,jsoncpp的15倍左右。大部份常规JSON文档解析速度优于rapidjson。
为了支持内置的consul client,项目里实现了基于标准C(C99)的高性能JSON解析器。
json value相关接口
json object相关接口
json array相关接口
build接口
请直接参考源代码。
示例
使用示例大家可以到这个独立repo上看一下:
https://github.com/barenboim/json-parser
目前workflow的master分支,包括了这个json paser。所以,只需在代码里直接引用就可以了。
Benchmark
实测parse性能大概是cJSON的2倍,jsoncpp的15倍左右。大部份常规JSON文档解析速度优于rapidjson。