C JSON是一種輕量級數(shù)據(jù)交換格式,被廣泛應(yīng)用于各種網(wǎng)絡(luò)通信場景中,因此解析JSON數(shù)據(jù)顯得尤為重要。在實際應(yīng)用中,有時需要動態(tài)解析JSON數(shù)據(jù),此時可以借助C JSON提供的API來實現(xiàn)。
// 示例JSON數(shù)據(jù) { "name": "張三", "age": 18, "hobby": ["游泳", "跑步"] } // 動態(tài)解析JSON數(shù)據(jù) cJSON *root = cJSON_Parse(json_str); // 解析JSON字符串 if (root == NULL) { printf("parse json error!\n"); return; } // 獲取JSON中的字段值 cJSON *name = cJSON_GetObjectItem(root, "name"); printf("name: %s\n", name->valuestring); cJSON *age = cJSON_GetObjectItem(root, "age"); printf("age: %d\n", age->valueint); cJSON *hobby = cJSON_GetObjectItem(root, "hobby"); int hobby_size = cJSON_GetArraySize(hobby); for (int i = 0; i< hobby_size; i++) { cJSON *item = cJSON_GetArrayItem(hobby, i); printf("hobby_%d: %s\n", i, item->valuestring); } cJSON_Delete(root); // 釋放內(nèi)存
通過cJSON_Parse函數(shù)解析JSON字符串得到一個JSON對象,再通過cJSON_GetObjectItem函數(shù)獲取其中的字段值。需要注意的是,如果解析失敗或者獲取的字段不存在,相關(guān)函數(shù)會返回NULL。
在獲取數(shù)組類型的字段值時,可以使用cJSON_GetArraySize函數(shù)獲取其長度,并通過cJSON_GetArrayItem函數(shù)遍歷其中的每個元素。
需要注意的是,使用完JSON對象后需要調(diào)用cJSON_Delete函數(shù)釋放其占用的內(nèi)存。