JSON C庫的使用

創建json對象

(1)函數:

extern struct json_object*  json_object_new_object(void);

函數說明: 創建一個新的json對象,引用計數1,該具有唯一的所有權。當使用json_object_object_add或者json_object_array_put_idx作用於該對象時,所有權轉移到另一方。使用json_object_get作用於該對象的所有權,必須使用json_object_put釋放。

(2)函數:

extern struct json_object* json_object_new_array(void);

函數說明: 創建的json數組類型對象

(3)創建一個json 的bool對象。

extern struct json_object* json_object_new_boolean(json_bool b);

(4)創建josn的int 32、64對象

extern struct json_object* json_object_new_int(int32_t i);
extern struct json_object* json_object_new_int64(int64_t i);

(5)將c字符串轉換爲json字符串格式的對象,該對象堆上分配

extern struct json_object* json_object_new_string(const char *s);
extern struct json_object* json_object_new_string_len(const char *s, int len);

(6)創建double類型的json對象

extern struct json_object* json_object_new_double(double d);

增加、刪除、修改

(1)給json對象增加字段
引用計數不會增加,val的所有權轉移到obj。

extern void json_object_object_add(struct json_object* obj, const char *key,struct json_object *val);

(2)刪除json對象的指定字段,被刪除的對象引用計數減去1,如果這個val沒有更多的所有者,這個key對應的val被free,否則這個val的引用保存在內存中

extern void json_object_object_del(struct json_object* obj, const char *key);

(3)增加一個元素到json數組的末尾。
obj引用計數不會增加,增加字段的方式更加緊湊。
如果需要獲取val的引用,需要用json_object_get來傳遞該對象。

extern int json_object_array_add(struct json_object *obj, struct json_object *val);

(4)替換json數組中的值

extern int json_object_array_put_idx(struct json_object *obj, int idx, struct json_object *val);

(5)json數組的排序,這裏需要自己寫排序函數

extern void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void*, const void *));

取值

(1)獲取json對象的長度,依據字段的數目

extern intjson_object_object_length(struct json_object* obj);

(2)獲取json對象的哈希表

extern struct lh_table*json_object_get_object(struct json_object *obj);

(3)從obj中獲取key對應的json對象,引用計數沒有改變

extern struct json_object*json_object_object_get(struct json_object* obj,const char *key);

(4)獲取對象的數組列表

extern struct array_list*json_object_get_array(struct json_object *obj);

(5)獲取json的類型

extern enum json_type json_object_get_type(struct json_object *obj);

(6)獲取json數組對象的長度

extern intjson_object_array_length(struct json_object *obj);

(7)獲取json對象bool值。int和double對象是0轉換爲FALSE,否則返回TRUE。
非0長度的字符串返回TRUE。其他對象非空的話,返回TRUE。

extern json_booljson_object_get_boolean(struct json_object *obj);

(8)獲取json對象的長度,如果參數不是string類型的json,返回0

extern intjson_object_get_string_len(struct json_object *obj);

(9)按照索引獲取json數組的對象

extern struct json_object* json_object_array_get_idx(struct json_object *obj, intidx);

類型轉換

(1)轉換json對象到c字符串格式

extern const char*json_object_to_json_string(struct json_object *obj);

(2)如果參數非json類型的字符串,返回then the JSON representation of the object is returned.參數對應的json對象內存空間,當其引用計數爲0時,該內存free。obj是json對象實例;回c格式的字符串;

extern const char* json_object_get_string(struct json_object *obj);

(3)同上,不同的是flags: formattingoptions, see JSON_C_TO_STRING_PRETTY and other constants

extern const char* json_object_to_json_string_ext(struct json_object *obj, int flags);

(4)如果傳遞的非int,強制轉換爲int。double對象返回其int。字符串解析爲int。
如果沒有轉換存在返回0.並且error置爲EINVVAL,0和null等價。
整形以64位值存儲,如果太小或是太大,不足以填充32位,將返回INT32_MAX,INT32_MIN

extern int32_t json_object_get_int(struct json_object *obj);

(5)獲取json對象的int64_t、double值

extern int64_t json_object_get_int64(struct json_object *obj);
extern double json_object_get_double(struct json_object *obj);

(6)將字符串轉換爲json對象

extern struct json_object* json_tokener_parse(const char *str);

json對象的釋放

以下兩個函數配合使用,前者獲取該對象指針的所有權, 引用計數加1,如果對象已經被釋放,返回1,後者引用計數減1,如果對象已經被釋放,返回1

extern  struct json_object* json_object_get(struct json_object *obj);
extern int  json_object_put(struct json_object *obj);

其他

(1) 類型判斷

externint json_object_is_type(struct json_object *obj, enum json_type type);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章