在使用C語言解析JSON數(shù)據(jù)時(shí),可能會(huì)出現(xiàn)解析成數(shù)組為空的情況。這種情況通常出現(xiàn)在JSON數(shù)據(jù)結(jié)構(gòu)被解析為一個(gè)對(duì)象而非數(shù)組時(shí)。
// 假設(shè)我們有以下JSON數(shù)據(jù) { "name": "小明", "age": 18, "hobbies": ["reading", "music", "sports"] } // 使用C語言代碼解析該數(shù)據(jù) cJSON *root = cJSON_Parse(json_str); cJSON *hobbies = cJSON_GetObjectItem(root, "hobbies"); int hobbies_len = cJSON_GetArraySize(hobbies); printf("hobbies length: %d\n", hobbies_len);
上述代碼解析JSON數(shù)據(jù)中的"hobbies"數(shù)組,并輸出數(shù)組長(zhǎng)度。如果我們將JSON數(shù)據(jù)中的"hobbies"改為一個(gè)對(duì)象,則數(shù)組長(zhǎng)度將會(huì)為0。
// 修改JSON數(shù)據(jù),將"hobbies"改為一個(gè)對(duì)象 { "name": "小明", "age": 18, "hobbies": { "reading": true, "music": true, "sports": true } } // 使用C語言代碼解析該數(shù)據(jù) cJSON *root = cJSON_Parse(json_str); cJSON *hobbies = cJSON_GetObjectItem(root, "hobbies"); int hobbies_len = cJSON_GetArraySize(hobbies); printf("hobbies length: %d\n", hobbies_len); // 輸出為 0
由于"hobbies"被解析為一個(gè)對(duì)象,而非數(shù)組,因此獲取數(shù)組長(zhǎng)度時(shí)返回的是0。如果我們要獲取"hobbies"中每個(gè)元素的值,需要使用循環(huán)遍歷對(duì)象中的每一項(xiàng)。
cJSON *hobby_obj = NULL; cJSON_ArrayForEach(hobby_obj, hobbies) { const char *hobby = cJSON_GetObjectItem(hobby_obj, "value")->valuestring; printf("hobby: %s\n", hobby); }
上述代碼通過循環(huán)遍歷"hobbies"對(duì)象中的每一項(xiàng),并輸出每一項(xiàng)的值。