C語言中操作JSON數據通常使用第三方庫,比如cJSON。cJSON是一個輕量級的C語言JSON解析器,它可以獲取多層JSON數據。
獲取多層JSON數據需要使用cJSON的指針遍歷功能。比如我們要獲取以下JSON數據:
{ "name": "小明", "age": 18, "score": { "math": 98, "english": 80 }, "address": { "province": "廣東省", "city": "深圳市", "street": "xx路xx號" } }
使用cJSON獲取該JSON數據的過程如下:
cJSON *root = cJSON_Parse(json_str); // 解析JSON字符串 // 獲取name字段 cJSON *name = cJSON_GetObjectItem(root, "name"); printf("name: %s\n", name->valuestring); // 獲取age字段 cJSON *age = cJSON_GetObjectItem(root, "age"); printf("age: %d\n", age->valueint); // 獲取score字段 cJSON *score = cJSON_GetObjectItem(root, "score"); // 獲取math字段 cJSON *math = cJSON_GetObjectItem(score, "math"); printf("math: %d\n", math->valueint); // 獲取english字段 cJSON *english = cJSON_GetObjectItem(score, "english"); printf("english: %d\n", english->valueint); // 獲取address字段 cJSON *address = cJSON_GetObjectItem(root, "address"); // 獲取province字段 cJSON *province= cJSON_GetObjectItem(address, "province"); printf("province: %s\n", province->valuestring); // 獲取city字段 cJSON *city = cJSON_GetObjectItem(address, "city"); printf("city: %s\n", city->valuestring); // 獲取street字段 cJSON *street = cJSON_GetObjectItem(address, "street"); printf("street: %s\n", street->valuestring);
以上代碼通過cJSON_GetObjectItem函數獲取JSON數據中的子項,并使用指針遍歷功能獲取多層數據。
注意:獲取JSON數據中的字段名和數據類型需要與實際JSON數據保持一致。