創建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);