在現(xiàn)代的軟件開發(fā)中,API 對(duì)接成為了非常重要的一部分。而在 API 交互中,數(shù)據(jù)的傳輸格式是一個(gè)必須要考慮的問題,目前最流行的兩種格式就是 XML 和 JSON。 對(duì)于 C 語(yǔ)言開發(fā)者而言,常常遇到將 C 語(yǔ)言中的結(jié)構(gòu)體轉(zhuǎn)換成為 JSON 格式的字符串的需求。這個(gè)時(shí)候我們就需要使用 C 結(jié)構(gòu)體轉(zhuǎn)換 json 的開源庫(kù)了。
CJSON 是一個(gè)比較受歡迎的 C 語(yǔ)言結(jié)構(gòu)體轉(zhuǎn)換 json 的開源庫(kù)。它提供了一系列的函數(shù),可以方便快捷地將 C 語(yǔ)言中的結(jié)構(gòu)體轉(zhuǎn)換為 JSON 對(duì)象,還可以將 JSON 對(duì)象轉(zhuǎn)換為 C 語(yǔ)言中的結(jié)構(gòu)體形式。 使用過程如下:
//構(gòu)造結(jié)構(gòu)體 struct student{ char name[20]; //姓名 int age; //年齡 char sex; //性別 };
我們想將上述結(jié)構(gòu)體轉(zhuǎn)換為如下 JSON 對(duì)象:
{ "name":"王小明", "age":20, "sex":"男" }
那么我們可以這樣編寫代碼:
#include "cjson.h" #include#include int main() { //構(gòu)造結(jié)構(gòu)體 struct student{ char name[20]; //姓名 int age; //年齡 char sex; //性別 }; struct student s; strcpy(s.name,"王小明"); s.age = 20; s.sex = 'M'; //結(jié)構(gòu)體轉(zhuǎn)換為 JSON 對(duì)象 cJSON *json = cJSON_CreateObject(); cJSON_AddStringToObject(json, "name", s.name); cJSON_AddNumberToObject(json, "age", s.age); cJSON_AddStringToObject(json, "sex", s.sex == 'M' ? "男" : "女"); printf("%s",cJSON_Print(json)); cJSON_Delete(json); }
如上述代碼所示,我們首先將結(jié)構(gòu)體的數(shù)據(jù)填入,然后使用 cJSON_CreateObject 函數(shù)創(chuàng)建一個(gè) JSON 對(duì)象,使用 cJSON_AddXXXX 函數(shù)添加數(shù)據(jù),最終使用 cJSON_Print 函數(shù)將 JSON 對(duì)象轉(zhuǎn)換成為 JSON 字符串。
除此之外,CJSON 還可以將 JSON 字符串轉(zhuǎn)換為 C 語(yǔ)言中的結(jié)構(gòu)體。一個(gè)例子代碼如下:
int main() { char *jsonstr = "{\"name\":\"王小明\",\"age\":20,\"sex\":\"男\(zhòng)"}"; char *name,*sex; int age; //JSON 轉(zhuǎn)換為結(jié)構(gòu)體 cJSON *json = cJSON_Parse(jsonstr); name = cJSON_GetObjectItem(json, "name")->valuestring; age = cJSON_GetObjectItem(json, "age")->valueint; sex = cJSON_GetObjectItem(json, "sex")->valuestring; printf("姓名:%s\n年齡:%d\n性別:%s\n",name,age,sex); cJSON_Delete(json); }
如上述代碼所示,我們首先定義一個(gè) JSON 字符串,然后使用 cJSON_Parse 函數(shù)將字符串轉(zhuǎn)換為 JSON 對(duì)象,然后使用 cJSON_GetObjectItem 函數(shù)獲取對(duì)應(yīng)數(shù)據(jù)并賦值給變量,就可以方便快捷地將 JSON 字符串轉(zhuǎn)換為 C 語(yǔ)言中的結(jié)構(gòu)體了。
總之,使用 CJSON 可以非常方便地進(jìn)行結(jié)構(gòu)體與 JSON 的互相轉(zhuǎn)換,是一個(gè)非常實(shí)用的開源庫(kù)。