在C語(yǔ)言中,我們可以通過cJSON庫(kù)來(lái)解析JSON格式的數(shù)據(jù),cJSON庫(kù)是一款輕量級(jí)的JSON數(shù)據(jù)解析庫(kù)。遍歷JSON對(duì)象可以通過cJSON庫(kù)中提供的函數(shù)實(shí)現(xiàn)。
首先我們需要使用cJSON庫(kù)解析JSON格式的數(shù)據(jù),導(dǎo)入cJSON.h頭文件,調(diào)用cJSON_Parse函數(shù)將JSON格式的數(shù)據(jù)解析成cJSON對(duì)象。
cJSON *root = cJSON_Parse(json_str); if (root == NULL) { printf("解析json數(shù)據(jù)失敗\n"); return; }
接下來(lái),我們可以通過cJSON提供的函數(shù)來(lái)遍歷JSON對(duì)象,例如獲取JSON對(duì)象中某個(gè)鍵對(duì)應(yīng)的值,使用cJSON_GetObjectItem函數(shù)獲取某個(gè)鍵值對(duì)應(yīng)的cJSON對(duì)象,然后通過cJSON提供的不同類型的函數(shù)獲取對(duì)應(yīng)的值。
cJSON *name_obj = cJSON_GetObjectItem(root, "name"); if (name_obj != NULL) { if (name_obj->type == cJSON_String) { printf("name:%s\n", name_obj->valuestring); } }
除了獲取某個(gè)鍵值對(duì)應(yīng)的值之外,我們還可以通過cJSON提供的函數(shù)遍歷整個(gè)JSON對(duì)象。例如,使用cJSON_ArrayForEach函數(shù)遍歷JSON數(shù)組對(duì)象。
cJSON *arr = cJSON_GetObjectItem(root, "array"); if (arr != NULL && arr->type == cJSON_Array) { int arr_size = cJSON_GetArraySize(arr); for (int i = 0; i< arr_size; i++) { cJSON *item = cJSON_GetArrayItem(arr, i); if (item != NULL && item->type == cJSON_String) { printf("array[%d]: %s\n", i, item->valuestring); } } }
上述代碼可以遍歷一個(gè)名為array的JSON數(shù)組對(duì)象,輸出每個(gè)元素的值。
使用cJSON庫(kù)遍歷JSON對(duì)象可以靈活地解析和處理任意格式的JSON數(shù)據(jù),同時(shí)也方便了我們使用C語(yǔ)言來(lái)解析JSON數(shù)據(jù)。