json、json-c、jsoncpp是3套不同的代码,其中的函数接口也大不一样,其中jsoncpp针对c++语言编写的。json-c比json要复杂一些,处理、容错能力稍强一些。

json-c的api介绍:

json_object.h文件常用的api

/*
增加obj的引用计数
*/
struct json_object* json_object_get(struct json_object *obj);
/*
减少obj的引用计数,当引用计数为0时,释放obj实例所占用的内存
*/
int json_object_put(struct json_object *obj);
/*
检查obj是否是给定的类型
type是下列之一:
     json_type_null (i.e. obj == NULL),
     json_type_boolean,
     json_type_double,
     json_type_int,
     json_type_object,
     json_type_array,
     json_type_string,
*/
int json_object_is_type(struct json_object *obj, enum json_type type);
/*
获取obj类型
*/
enum json_type json_object_get_type(struct json_object *obj);
/*
将obj实例转化成一个json格式的字符串
等同于json_object_to_json_string_ext(obj, JSON_C_TO_STRING_SPACED)
返回一个json格式的字符串指针
*/
const char* json_object_to_json_string(struct json_object *obj);
/*
将obj实例转化成一个json格式的字符串
flags:
JSON_C_TO_STRING_PLAIN
JSON_C_TO_STRING_SPACED 
JSON_C_TO_STRING_PRETTY 
JSON_C_TO_STRING_NOZERO
*/
const char* json_object_to_json_string_ext(struct json_object *obj, int flags);
/*
构建一个json对象
*/
struct json_object* json_object_new_object(void);
/*
获取一个obj实例中项目的数量
*/
int json_object_object_length(struct json_object* obj);
/*
向obj实例中增加一个键值对
*/
void json_object_object_add(struct json_object* obj, const char *key,
                   struct json_object *val);
/*
该函数被弃用,请用 json_object_object_get_ex
*/
struct json_object* json_object_object_get(struct json_object* obj,
                          const char *key)
/*
从obj实例中获取键key对应的json对象,并将找到的json对象指针存放到value中,
该函数不会改变引用计数
成功返回TRUE
失败返回FALSE
*/
json_bool json_object_object_get_ex(struct json_object* obj,
                          const char *key,
                          struct json_object **value);
/*
删除给定的json字段,实际上只是减少引用计数,当引用计数为0时才会真正删除(释放)该字段
*/
void json_object_object_del(struct json_object* obj, const char *key);
/*
这是一个宏定义,遍历obj实例的所有键值对
*/
json_object_object_foreach(obj,key,val)
/*
建立一个数组类型的json对象,返回json_type_array类型的对象
*/
struct json_object* json_object_new_array(void)
/*
获取obj对象中的数组对象列表,obj必须是json_type_array类型
*/
struct array_list* json_object_get_array(struct json_object *obj);
/*
获取obj对象的长度,obj必须是json_type_array类型
*/
int json_object_array_length(struct json_object *obj);
/*
增加一个元素到obj的末尾,obj必须是json_type_array类型
*/
int json_object_array_add(struct json_object *obj,
                 struct json_object *val);
/*
插入或替换数组obj中的对应索引下的值,obj必须是json_type_array类型
*/
int json_object_array_put_idx(struct json_object *obj, int idx,
                     struct json_object *val);
/*
获取数组obj中的对应索引下的对象,obj必须是json_type_array类型
*/
struct json_object* json_object_array_get_idx(struct json_object *obj,
                             int idx);
/*
创建一个空的json_type_boolean类型的json对象
*/
struct json_object* json_object_new_boolean(json_bool b);
/*
获取obj对象中的值,obj必须为json_type_boolean类型
对于字符串非空或int,double非零的情况下都返回TRUE,否则返回FALSE
*/
json_bool json_object_get_boolean(struct json_object *obj);
struct json_object* json_object_new_int(int32_t i);
struct json_object* json_object_new_int64(int64_t i);
struct json_object* json_object_new_double(double d);
struct json_object* json_object_new_double_s(double d, const char *ds);
struct json_object* json_object_new_string(const char *s);
struct json_object* json_object_new_string_len(const char *s, int len);
int32_t json_object_get_int(struct json_object *obj);
int64_t json_object_get_int64(struct json_object *obj);
double json_object_get_double(struct json_object *obj);
const char* json_object_get_string(struct json_object *obj);
int json_object_get_string_len(struct json_object *obj);

json_tokener.h文件
主要实现了json文本解析器
主要介绍下面几个函数

/*
将一个字符串解析成json对象并返回对象指针
str:待解析的字符串
tok:先前由json_tokener_new()创建的对象
len:字符串str长度
*/

struct json_object* json_tokener_parse(const char *str); //建议直接使用此函数,最后记得用json_object_put();释放内存
struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
                         const char *str, int len);
/*
调试用,打印错误信息
*/
json_tokener_get_error(struct json_tokener *tok)
/*
构建和销毁json文本解析器
*/
struct json_tokener* json_tokener_new(void);
void json_tokener_free(struct json_tokener *tok);
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐