在C語言中,處理多層嵌套的JSON數(shù)據(jù)是非常常見的。JSON數(shù)據(jù)是一種輕量級的數(shù)據(jù)交換格式,通常用于Web前端與后端的數(shù)據(jù)傳輸。C語言中有很多庫支持JSON數(shù)據(jù)的解析和生成,比如cJSON和Jansson等。
下面我們以cJSON庫為例,來看看如何處理多層嵌套的JSON數(shù)據(jù)。
#include <stdio.h> #include <cJSON.h> int main() { char *json_string = "{ \"name\": \"Alice\", \"age\": 20, \"address\": { \"province\": \"Guangdong\", \"city\": \"Shenzhen\", \"district\": \"Nanshan\" } }"; cJSON *root = cJSON_Parse(json_string); cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *age = cJSON_GetObjectItem(root, "age"); cJSON *address = cJSON_GetObjectItem(root, "address"); cJSON *province = cJSON_GetObjectItem(address, "province"); cJSON *city = cJSON_GetObjectItem(address, "city"); cJSON *district = cJSON_GetObjectItem(address, "district"); printf("name: %s\n", cJSON_GetStringValue(name)); printf("age: %d\n", cJSON_GetNumberValue(age)); printf("province: %s\n", cJSON_GetStringValue(province)); printf("city: %s\n", cJSON_GetStringValue(city)); printf("district: %s\n", cJSON_GetStringValue(district)); cJSON_Delete(root); return 0; }
以上代碼展示了如何解析一個包含多層嵌套的JSON數(shù)據(jù),并獲取其中的某些元素。在cJSON庫中,我們首先需要將JSON字符串解析為一個cJSON對象,然后通過cJSON_GetObjectItem函數(shù)獲取其某個元素的指針。如果該元素是字符串類型,我們可以使用cJSON_GetStringValue函數(shù)來獲取其值;如果是數(shù)值類型,我們則可以使用cJSON_GetNumberValue函數(shù)來獲取其值。
同時,在使用完cJSON對象后,我們需要手動調(diào)用cJSON_Delete函數(shù)來釋放內(nèi)存,防止內(nèi)存泄漏。