在C編程中,常常會(huì)用到JSON格式的數(shù)據(jù)進(jìn)行數(shù)據(jù)傳輸和存儲(chǔ),但是在C語(yǔ)言中沒(méi)有直接轉(zhuǎn)化為JSON格式的函數(shù),因此我們需要手動(dòng)編寫(xiě)代碼來(lái)實(shí)現(xiàn)JSON轉(zhuǎn)換。其中,JSON數(shù)組可以轉(zhuǎn)化為C語(yǔ)言中的List數(shù)據(jù)類型。下面,將介紹C語(yǔ)言中如何將JSON數(shù)據(jù)轉(zhuǎn)化為L(zhǎng)ist。
#include#include #include "cJSON.h" #define SIZE 100 typedef struct node{ int data; struct node *next; }NODE; NODE *create(int data){ NODE *p = (NODE *)malloc(sizeof(NODE)); p->data = data; p->next = NULL; return p; } NODE *insert(NODE *L, int x){ NODE *p = L; NODE *temp = create(x); if(L == NULL){ L = temp; } else{ while(p->next != NULL){ p = p->next; } p->next = temp; } return L; } void printList(NODE *L){ NODE *p = L; while(p){ printf("%d ", p->data); p = p->next; } } int main(){ char buffer[SIZE] = {0}; FILE *fp = fopen("data.json", "rb"); fread(buffer, 1, SIZE, fp); cJSON *json = cJSON_Parse(buffer); cJSON *list = cJSON_GetObjectItem(json, "list"); NODE *L = NULL; for(int i = 0; i< cJSON_GetArraySize(list); i++){ cJSON *item = cJSON_GetArrayItem(list, i); int data = cJSON_GetObjectItem(item, "data")->valueint; L = insert(L, data); } printList(L); fclose(fp); return 0; }
上述代碼中,定義了一個(gè)NODE結(jié)構(gòu)體,用來(lái)表示鏈表的節(jié)點(diǎn),包括data和next兩個(gè)屬性。其中,create函數(shù)用來(lái)創(chuàng)建節(jié)點(diǎn),insert函數(shù)用來(lái)插入節(jié)點(diǎn),printList函數(shù)用來(lái)遍歷并打印鏈表。主函數(shù)中,讀取JSON文件并解析為json對(duì)象,再使用cJSON庫(kù)函數(shù)cJSON_GetObjectItem獲取list數(shù)組對(duì)象。使用cJSON庫(kù)函數(shù)cJSON_GetArraySize獲取數(shù)組長(zhǎng)度,并使用cJSON_GetArrayItem獲取每個(gè)元素的json對(duì)象。最后,獲取data屬性值,并調(diào)用insert函數(shù)將其插入鏈表中。
通過(guò)上述代碼,我們可以在C語(yǔ)言中實(shí)現(xiàn)JSON轉(zhuǎn)List。