在C語言中,有時候我們需要將JSON數(shù)據(jù)轉(zhuǎn)換成對象數(shù)組,以方便后續(xù)的處理和操作。下面,我們介紹如何使用C語言中的JSON庫將JSON數(shù)據(jù)轉(zhuǎn)換成對象數(shù)組。
#include#include #include #include "cJSON.h" typedef struct { int id; char name[20]; int age; } Person; int main() { char *jsonStr = "{\"data\":[{\"id\":1,\"name\":\"Tom\",\"age\":18},{\"id\":2,\"name\":\"Jerry\",\"age\":20}]}"; cJSON *json = cJSON_Parse(jsonStr); cJSON *dataArray = cJSON_GetObjectItem(json, "data"); int arraySize = cJSON_GetArraySize(dataArray); Person *personArray = (Person *)malloc(arraySize * sizeof(Person)); for (int i = 0; i< arraySize; i++) { cJSON *item = cJSON_GetArrayItem(dataArray, i); cJSON *id = cJSON_GetObjectItem(item, "id"); cJSON *name = cJSON_GetObjectItem(item, "name"); cJSON *age = cJSON_GetObjectItem(item, "age"); personArray[i].id = id->valueint; strcpy(personArray[i].name, name->valuestring); personArray[i].age = age->valueint; } for (int i = 0; i< arraySize; i++) { printf("id:%d, name:%s, age:%d\n", personArray[i].id, personArray[i].name, personArray[i].age); } cJSON_Delete(json); free(personArray); return 0; }
在以上代碼中,我們首先定義了Person結(jié)構(gòu)體,然后定義了main函數(shù)。在main函數(shù)中,我們首先初始化JSON字符串,然后使用cJSON_Parse函數(shù)將JSON字符串轉(zhuǎn)換成JSON對象。接著,我們使用cJSON_GetObjectItem函數(shù)獲取JSON對象中的data數(shù)組,并通過cJSON_GetArraySize函數(shù)獲取data數(shù)組的大小。我們創(chuàng)建了一個與data數(shù)組大小相同的Person對象數(shù)組用來存儲數(shù)組中的個人信息。
在循環(huán)過程中,我們通過cJSON_GetArrayItem函數(shù)獲取data數(shù)組中的每一個JSON對象,并通過cJSON_GetObjectItem函數(shù)獲取其中的id、name和age屬性。我們將這些屬性值存儲到對應(yīng)的Person對象中,以方便后續(xù)的使用。
最后,我們遍歷Person對象數(shù)組并輸出其中的每一個人的id、name和age屬性。最后,我們通過cJSON_Delete函數(shù)釋放JSON對象的內(nèi)存,通過free函數(shù)釋放Person對象數(shù)組的內(nèi)存。