日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

json-c库使用总结

發布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 json-c库使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. json_object_get與json_object_put函數?

struct json_object* json_object_get(struct json_object *jso); // 將json對象的引用計數加1,返回jso自身

void json_object_put(struct json_object *jso); // 將jso對象的引用計數減1。此時如果json的引用計數大于0,直接返回; 如果json的引用計數為0,則遞歸的對每個子對象的引用計數減1,子對象引用計數為0時釋放所占用內存。

注:如果對json對象顯式調用了json_object_get,之后必須成對調用json_object_put,否則將導致該json對象所占用內存泄漏。

2. json_object_new_XXX系列函數 struct json_object* json_object_new_object(void);

struct json_object* json_object_new_int(int i);

struct json_object* json_object_new_double(double d);

struct json_object* json_object_new_array(void);

struct json_object* json_object_new_string(const char *s);

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

json_object_new_XXX系列函數用來創建XXX類型的json對象,創建的json對象默認引用計數為1,因此在該對象使用完后也需要調用一次json_object_put來把引用計數置0,從而釋放內存。

3. json_tokener_parse函數?

struct json_object* json_tokener_parse(const char *str);

json_tokener_parse將符合json格式的字符串構造為一個json對象,構造的json對象默認引用計數為1,同樣需要在使用完后對該對象調用一次json_object_put。

4. is_error宏

is_error(jso)

如果傳入的字符串是非法的json格式,錯誤判斷應該使用is_error宏,而非 if(NULL != jso),CGI中目前有很多這種錯誤用法(雖然好像沒引發什么問題)

5. json_object_object_XXX函數

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

從jso對象中刪除鍵值為key的子對象,并釋放該子對象及鍵值所占的內存(注:可能有文檔說json_object_object_del只是刪除而不釋放內存,但實際上這是錯誤的)。

struct json_object* json_object_object_get(struct json_object* jso, const char *key); 從jso中獲取鍵值為key的子對象。錯誤判斷同樣應該用is_error(jso)宏。

void json_object_object_add(struct json_object* jso, const char *key, struct json_object *val); 更新鍵值為key的子項的值。整個過程實際上是這樣的:先從jso中刪除并釋放鍵值key及其值的內存,然后重新分配內存添加鍵值和新的值,所以json_object_object_add是包含json_object_object_del操作的。

6. json_object_get_XXX系列函數?

struct lh_table* json_object_get_object(struct json_object *jso);

const char* json_object_get_string(struct json_object *jso);

int json_object_get_int(struct json_object *jso);

double json_object_get_double(struct json_object *jso); 這類函數只是獲取json對象的實際數據內容,不更新引用計數,也不分配內存。

7. json_object_array_XXX系列函數

struct json_object* json_object_array_get_sub_array(struct json_object *jso, int start_idx, int number);

這個函數用來從一個json數組對象中取數組序號start_idx開始的、總共number長度的子數組對象。分頁顯示功能常用到。注:返回的子數組是有重新分配內存的,所以同樣要對返回的json_object*做一次json_object_put操作來釋放內存。

int json_object_array_add(struct json_object *jso,struct json_object *val); 向數組中添加一個值。

int json_object_array_length(struct json_object *jso); 獲取數組長度。

int json_object_array_put_idx(struct json_object *jso, int idx, struct json_object *val); 更新數組中序號為idx那一項的值,老的值同樣會先被釋放。

struct json_object* json_object_array_get_idx(struct json_object *jso, int idx); 獲取數組中序號為idx那一項的json對象,不更新引用計數,也不分配內存。

struct json_object* json_object_array_sort(struct json_object *jso, const char *keyname, int sord ); 根據鍵值為keyname的項的值進行升序或降序排序,只是改變數組成員的順序,不更新引用計數,也不分配內存。

總結

以上是生活随笔為你收集整理的json-c库使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。