C語言中操作JSON格式數(shù)據(jù)要用到第三方庫,比如 cJSON。該庫功能強大,支持將JSON格式數(shù)據(jù)轉(zhuǎn)化成相應的C結(jié)構(gòu)體,也能將C結(jié)構(gòu)體轉(zhuǎn)換成JSON格式數(shù)據(jù),同時支持修改、刪除、插入等操作。本文重點介紹cJSON中如何將JSON對象轉(zhuǎn)換成數(shù)組對象。
// 讀取JSON格式數(shù)據(jù) cJSON *json = cJSON_Parse("{\"name\":\"Tom\",\"age\":20,\"hobby\":[\"music\",\"movie\",\"book\"]}"); // 判斷JSON數(shù)據(jù)是否是對象類型 if (json->type == cJSON_Object) { // 獲取JSON對象中的hobby數(shù)組 cJSON *hobby = cJSON_GetObjectItem(json, "hobby"); // 判斷獲取的hobby數(shù)組是否不為空且是數(shù)組類型 if (hobby != NULL && hobby->type == cJSON_Array) { // 獲取hobby數(shù)組中的元素數(shù)量 int hobby_count = cJSON_GetArraySize(hobby); // 遍歷hobby數(shù)組中的所有元素 for (int i = 0; i< hobby_count; i++) { // 獲取hobby數(shù)組中的第i個元素 cJSON *hobby_item = cJSON_GetArrayItem(hobby, i); // 輸出hobby數(shù)組中的第i個元素 if (hobby_item != NULL && hobby_item->type == cJSON_String) { printf("%s\n", hobby_item->valuestring); } } } } // 釋放JSON格式數(shù)據(jù) cJSON_Delete(json);
以上代碼通過cJSON庫將JSON格式數(shù)據(jù)轉(zhuǎn)換成cJSON結(jié)構(gòu)體,并獲取其中的hobby數(shù)組,判斷hobby是否不為空且是數(shù)組類型。如果滿足條件,則遍歷hobby數(shù)組中的所有元素,并輸出每個元素的值。最后釋放cJSON結(jié)構(gòu)體以防止內(nèi)存泄漏。