CJSON是一個輕量級的JSON解析庫,它適用于C語言編寫的應用程序。CJSON可以將JSON數據解析為C語言數據結構,反之它也可以將C語言數據結構序列化為JSON數據。CJSON不僅僅可以解析靜態的JSON數據,還可以動態反序列化JSON數據。
/*動態反序列化JSON*/ #include <cjson/cJSON.h> #include <stdio.h> int main() { char *json_str = "{ \"name\": \"Alice\", \"age\": 24, \"address\": { \"city\": \"Beijing\", \"street\": \"No.8 Road\" }, \"scores\": [90, 80, 95] }"; cJSON *root = cJSON_Parse(json_str); cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *age = cJSON_GetObjectItem(root, "age"); cJSON *address = cJSON_GetObjectItem(root, "address"); cJSON *city = cJSON_GetObjectItem(address, "city"); cJSON *scores = cJSON_GetObjectItem(root, "scores"); cJSON *score1 = cJSON_GetArrayItem(scores, 0); printf("name: %s\n", name->valuestring); printf("age: %d\n", age->valueint); printf("address.city: %s\n", city->valuestring); printf("scores[0]: %d\n", score1->valueint); cJSON_Delete(root); return 0; }
上述代碼中,我們首先先定義了一個JSON字符串,然后通過cJSON_Parse函數將其解析為一個CJSON對象,接著使用cJSON_GetObjectItem來獲取對象中的屬性值,最后通過各個cJSON對象中提供的接口函數獲取屬性值。
動態反序列化JSON是一個很常見的應用場景,因為動態反序列化比靜態反序列化更加靈活,能夠根據實際情況對JSON數據進行處理。