在C語(yǔ)言中,我們可以使用第三方庫(kù)來(lái)解析JSON數(shù)據(jù)。這里以cJSON庫(kù)為例,假設(shè)我們已經(jīng)將JSON數(shù)據(jù)解析成了cJSON對(duì)象,如何從cJSON對(duì)象中取出我們需要的數(shù)據(jù)呢?
// 假設(shè)我們已經(jīng)解析出了如下的JSON數(shù)據(jù) // { // "name": "張三", // "age": 25, // "address": { // "city": "北京", // "street": "XX路XX號(hào)" // }, // "hobbies": ["游泳", "健身"] // } // 首先從cJSON對(duì)象中獲取name屬性對(duì)應(yīng)的值 cJSON* nameObj = cJSON_GetObjectItem(root, "name"); if (nameObj != NULL && nameObj->type == cJSON_String) { printf("name:%s\n", nameObj->valuestring); } // 獲取age屬性對(duì)應(yīng)的值 cJSON* ageObj = cJSON_GetObjectItem(root, "age"); if (ageObj != NULL && ageObj->type == cJSON_Number) { printf("age:%d\n", ageObj->valueint); } // 獲取address屬性對(duì)應(yīng)的值 cJSON* addressObj = cJSON_GetObjectItem(root, "address"); if (addressObj != NULL && addressObj->type == cJSON_Object) { cJSON* cityObj = cJSON_GetObjectItem(addressObj, "city"); if (cityObj != NULL && cityObj->type == cJSON_String) { printf("city:%s\n", cityObj->valuestring); } cJSON* streetObj = cJSON_GetObjectItem(addressObj, "street"); if (streetObj != NULL && streetObj->type == cJSON_String) { printf("street:%s\n", streetObj->valuestring); } } // 獲取hobbies屬性對(duì)應(yīng)的值 cJSON* hobbiesObj = cJSON_GetObjectItem(root, "hobbies"); if (hobbiesObj != NULL && hobbiesObj->type == cJSON_Array) { int array_len = cJSON_GetArraySize(hobbiesObj); for (int i = 0; i< array_len; i++) { cJSON* item = cJSON_GetArrayItem(hobbiesObj, i); if (item != NULL && item->type == cJSON_String) { printf("hobby:%s\n", item->valuestring); } } }
通過(guò)上述代碼,我們可以成功地從JSON對(duì)象中取出我們需要的數(shù)據(jù),這樣我們就可以在C語(yǔ)言中方便地處理JSON數(shù)據(jù)了。