在 C 語言中,序列化 JSON 集合是很常見的操作。JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,通常用于面向 Web 應用的數據傳輸。C 語言是一種底層語言,但是也可以通過使用第三方庫來處理 JSON 數據。
C 庫中最流行的 JSON 序列化庫是 cJSON。該庫是一個輕量級的庫,可以在任何支持 ANSI C 的平臺上運行,并支持 UTF-8 編碼的 JSON 格式。
#include#include #include "cJSON.h" int main() { // 創建一個 JSON 對象 cJSON *root = cJSON_CreateObject(); // 添加屬性 cJSON_AddItemToObject(root, "name", cJSON_CreateString("Tom")); cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(20)); cJSON_AddItemToObject(root, "is_student", cJSON_CreateTrue()); // 序列化 JSON 對象 char *json_string = cJSON_Print(root); printf("JSON string: %s\n", json_string); // 釋放內存 free(json_string); cJSON_Delete(root); return 0; }
上面的代碼演示了如何使用 cJSON 序列化一個 JSON 對象。首先創建一個 cJSON 對象,然后添加屬性,最后調用 cJSON_Print 函數將 JSON 對象序列化為字符串。需要注意的是,在使用完 cJSON 對象后,需要手動釋放內存。
CJSON同時也支持解析JSON數據,使用方式如下:
#include#include #include "cJSON.h" int main() { char *json_string = "{\"name\":\"Tom\",\"age\":20,\"is_student\":true}"; // 解析 JSON 字符串 cJSON *root = cJSON_Parse(json_string); // 獲取屬性值 cJSON *name_item = cJSON_GetObjectItem(root, "name"); cJSON *age_item = cJSON_GetObjectItem(root, "age"); cJSON *is_student_item = cJSON_GetObjectItem(root, "is_student"); printf("name: %s\n", name_item->valuestring); printf("age: %d\n", age_item->valueint); printf("is_student: %d\n", is_student_item->valueint); // 釋放內存 cJSON_Delete(root); return 0; }
上面的代碼演示了如何使用 cJSON 解析 JSON 字符串,并從中獲取屬性值。首先將 JSON 字符串傳入 cJSON_Parse 函數中,該函數將返回一個 cJSON 對象。通過 cJSON_GetObjectItem 函數獲取屬性值,不同類型的屬性值需要使用不同的訪問函數(例如 cJSON_GetObjectItem 中的 cJSON_GetObjectItemString 函數),最后使用 cJSON_Delete 函數釋放 cJSON 對象所占用的內存。