在C語(yǔ)言中,解析JSON數(shù)組對(duì)象數(shù)組是非常常見(jiàn)的操作。通常情況下,我們使用第三方庫(kù)來(lái)處理這個(gè)任務(wù),比如cJSON這個(gè)輕量級(jí)的JSON解析庫(kù)。
首先,我們需要準(zhǔn)備一個(gè)JSON文本字符串,它包含一個(gè)數(shù)組對(duì)象數(shù)組,例如:
[ { "name": "apple", "color": "red" }, { "name": "banana", "color": "yellow" } ]
接下來(lái),我們需要使用cJSON庫(kù)來(lái)解析這個(gè)JSON文本字符串。首先,我們需要將文本字符串解析成一個(gè)cJSON對(duì)象,然后通過(guò)遍歷這個(gè)對(duì)象來(lái)獲取JSON數(shù)組對(duì)象數(shù)組中的每一個(gè)對(duì)象。
#include <stdio.h> #include <cjson/cJSON.h> int main() { const char *json_string = "[{\"name\":\"apple\",\"color\":\"red\"},{\"name\":\"banana\",\"color\":\"yellow\"}]"; cJSON *root = cJSON_Parse(json_string); if (root == NULL) { printf("parse error\n"); return 1; } int array_size = cJSON_GetArraySize(root); for (int i = 0; i < array_size; i++) { cJSON *array_item = cJSON_GetArrayItem(root, i); cJSON *name = cJSON_GetObjectItem(array_item, "name"); cJSON *color = cJSON_GetObjectItem(array_item, "color"); printf("%s is %s\n", name->valuestring, color->valuestring); } cJSON_Delete(root); return 0; }
首先,我們將JSON文本字符串賦值給一個(gè)指針變量json_string。然后,使用cJSON_Parse函數(shù)將json_string解析成一個(gè)cJSON對(duì)象root。如果解析失敗,則返回NULL。
使用cJSON_GetArraySize函數(shù)獲取JSON數(shù)組對(duì)象數(shù)組的長(zhǎng)度,然后通過(guò)循環(huán)遍歷每一個(gè)對(duì)象。使用cJSON_GetArrayItem函數(shù)獲取當(dāng)前對(duì)象,并使用cJSON_GetObjectItem函數(shù)獲取對(duì)象中的"name"和"color"成員,分別保存到name和color指針變量中。最后,輸出name和color的值,并在每個(gè)對(duì)象之間輸出一個(gè)換行符。
最后,我們?cè)诔绦蚪Y(jié)束前使用cJSON_Delete函數(shù)釋放root對(duì)象的內(nèi)存空間,防止內(nèi)存泄漏。