CJson使用(構造和解析)

2021-09-27 02:21:25 字數 2765 閱讀 4397

cjson,目前來說,就只有兩個檔案,乙個cjson.c 乙個cjson.**件。工程裡新增這兩個檔案就可以使用cjson構造或者解析相應的檔案。

cjson * cjson_createobject();

建立乙個json物件,返回乙個cjson結構體型別的指標。

cjson *cjson_createarray();

建立乙個陣列物件,返回乙個cjson結構體型別的指標。

cjson *cjson_createstring(const char *string);

建立乙個字串物件,傳入乙個char *型別的字串,返回乙個cjson結構體型別的指標。

void cjson_additemtoarray(cjson *array, cjson *item);

向陣列物件中新增乙個元素,傳入引數array為cjson *結構體型別的指標,為陣列物件; item為新增入數字物件中的物件指標。

void cjson_additemtoobject(cjson *object,const char *string,cjson *item);

向json物件中新增一對元素,object為json物件,string為加入一對元素中的name,item為加入一對元素中的value。

cjson *cjson_parse(const char *value);

解析乙個json串,傳入乙個json格式的字串,返回乙個cjson *型別的結構體指標。

char  *cjson_print(cjson *item);

將乙個cjson結構體代表的json物件轉換為乙個json格式的字串。

void   cjson_delete(cjson *c);

釋放乙個cjson物件所占用的記憶體空間。

構造乙個json格式的字串如下所示:

,        

,  ,    

,   

,  ]

}json寫入:

1.      建立json root物件分配空間

2.      向root物件中新增 item item可以是item 、object 、array

1、item:用cjson_createstring() cjson_createnumber()建立的item

2、object:先建立json物件分配空間 可以向當前物件中新增item

3、array:先建立array 分配空間 然後向當前的array新增object

3.生成json root物件 的json字串

4.釋放json root空間。

**如下所示:

unsigned re**al=;

/****************************構造乙個json格式字串******************************************/

void create_jsonstr(void)

jsonstr = cjson_printunformatted(json); //獲取字串指標 無格式

//jsonstr = cjson_print(cjson); //獲取字串指標 有格式

printf("%s",jsonstr);

cjson_delete(json); //刪除主節點物件

free(jsonstr);

}

/****************************解析json格式字串******************************************/

void parse_jsonstr(char *jsonstr)

item=cjson_getobjectitem(json, "msgtype");

printf("msgtype=%d \n",item->valueint);

item=cjson_getobjectitem(json, "deviceid");

printf("deviceid=%s \n",item->valuestring);

item=cjson_getobjectitem(json, "regnum");

printf("regnum=%d \n",item->valueint);

array = cjson_getobjectitem(json, "data");

icount=cjson_getarraysize(array);

if(icount != item->valueint)

for(i=0; i < icount; i++)

cjson_delete(cjson); //刪除主節點物件

}

1、cjson_print也是分配記憶體的,需要手動去釋放掉,需要和free()配套使用。

2、    cjson_printunformatted(json);   和 cjson_print(cjson);     都是獲取字串指標 一種是無格式,一種是有格式。有格式生成的人字串新增了很多空格盒換行符有利於閱讀,但不利於資料傳輸。推薦使用無格式傳輸。

3、對於乙個cjson資料樹,只需要刪除主節點,子節點就會主動釋放。但是如果子節點沒有包含在主節點內,需要主動釋放,要不然會造成記憶體洩漏。使用cjson_delete();                        //刪除節點物件

cjson構建 cJSON的構造和解析

對於cjson的使用,我主要是用來模擬遠端伺服器端返回的乙個json型別的目錄結構,客戶端進行獲取並進行解析,把解析出來的目錄按照原本的結構顯示在本地。cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器。cjson結構體 typedef struct cjson...

cJSON的構造和解析

對於cjson的使用,我主要是用來模擬遠端伺服器端返回的乙個 json 型別的目錄結構,客戶端進行獲取並進行解析,把解析出來的目錄按照原本的結構顯示在本地。cjson 是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為 ansi c 標準的json 解析器。進入cjson.h標頭檔案中可以檢視cjson...

cJSON的構建和解析

一 cjson構建 define module num 3 int encode json cjson root cjson createobject 在根節點建立cjson物件 root cjson name list array cjson createarray 建立陣列物件 name lis...