在C語言中,JSON數據的解析是一個非常常見的操作。對象數組是一種復雜的JSON數據類型,它由多個JSON對象組成,并按照固定的順序排列。C語言中可以使用cJSON庫來動態解析對象數組。
cJSON* root = cJSON_Parse(json_string); //解析JSON字符串為cJSON對象 if(root != NULL) { //判斷對象是否解析成功 cJSON* array = cJSON_GetObjectItem(root, "array"); //獲取對象數組對應的cJSON對象 if(array != NULL && cJSON_IsArray(array)) { //判斷對象數組是否存在且為數組類型 int count = cJSON_GetArraySize(array); //獲取對象數組的元素個數 for(int i = 0; i< count; i++) { //遍歷所有元素 cJSON* obj = cJSON_GetArrayItem(array, i); //獲取數組元素對應的cJSON對象 if(obj != NULL && cJSON_IsObject(obj)) { //判斷對象是否存在且為對象類型 cJSON* name = cJSON_GetObjectItem(obj, "name"); //獲取對象屬性中的name對應的cJSON對象 if(name != NULL && cJSON_IsString(name)) { //判斷name屬性是否存在且為字符串類型 printf("name: %s\n", name->valuestring); //輸出name屬性的值 } cJSON* age = cJSON_GetObjectItem(obj, "age"); //獲取對象屬性中的age對應的cJSON對象 if(age != NULL && cJSON_IsNumber(age)) { //判斷age屬性是否存在且為數字類型 printf("age: %d\n", age->valueint); //輸出age屬性的值 } } } } } cJSON_Delete(root); //釋放cJSON對象占用的內存
在代碼中,首先通過cJSON_Parse函數將JSON字符串解析為cJSON對象。然后通過cJSON_GetObjectItem函數獲取對象數組對應的cJSON對象。判斷對象數組是否存在且為數組類型,通過cJSON_GetArraySize函數獲取對象數組的元素個數,遍歷所有元素,通過cJSON_GetArrayItem函數獲取數組元素對應的cJSON對象。判斷對象是否存在且為對象類型,通過cJSON_GetObjectItem函數獲取對象屬性中的name和age對應的cJSON對象。判斷屬性是否存在且為正確的數據類型,輸出屬性的值。最后通過cJSON_Delete函數釋放cJSON對象占用的內存。