在 C 語言中,序列化和反序列化 JSON 數(shù)據(jù)是非常常見的操作。為了能夠快速高效地進行這些操作,我們可以使用 c 庫中提供的序列化工具。
其中,序列化的過程就是將 C 語言中的結(jié)構(gòu)體或變量轉(zhuǎn)化為 JSON 格式的文本;而反序列化則是將 JSON 格式的文本轉(zhuǎn)換成 C 語言中的結(jié)構(gòu)體或變量。下面是一個示例代碼:
#include <stdio.h>#include <cJSON.h>int main() { // 創(chuàng)建一個 cJSON 對象 cJSON *root = cJSON_CreateObject(); // 向 cJSON 對象中添加屬性 cJSON_AddStringToObject(root, "name", "小明"); cJSON_AddNumberToObject(root, "age", 20); cJSON_AddBoolToObject(root, "isMale", true); // 序列化 cJSON 對象為 JSON 格式的文本 char *jsonStr = cJSON_Print(root); printf("序列化后的 JSON 數(shù)據(jù):\n%s\n", jsonStr); // 反序列化 JSON 格式的文本為 cJSON 對象 cJSON *newRoot = cJSON_Parse(jsonStr); // 從 cJSON 對象中獲取屬性 const char *name = cJSON_GetObjectItem(newRoot, "name")->valuestring; int age = cJSON_GetObjectItem(newRoot, "age")->valueint; bool isMale = cJSON_GetObjectItem(newRoot, "isMale")->valueint; // 輸出反序列化得到的屬性值 printf("反序列化后的屬性值:\nname=%s, age=%d, isMale=%d\n", name, age, isMale); // 釋放 cJSON 對象和序列化后的 JSON 數(shù)據(jù) cJSON_Delete(root); cJSON_Delete(newRoot); free(jsonStr); return 0; }
在這份代碼中,我們首先通過 cJSON 庫中的 cJSON_CreateObject() 函數(shù)創(chuàng)建了一個 cJSON 對象,然后使用 cJSON_AddStringToObject()、cJSON_AddNumberToObject() 和 cJSON_AddBoolToObject() 函數(shù)向該對象中添加了不同類型的屬性。
接下來,我們使用 cJSON 庫中的 cJSON_Print() 函數(shù)將 cJSON 對象序列化為 JSON 格式的文本,并通過 printf() 函數(shù)輸出到控制臺上。
然后,我們使用 cJSON 庫中的 cJSON_Parse() 函數(shù)將這個 JSON 格式的文本反序列化為一個新的 cJSON 對象,再使用 cJSON_GetObjectItem() 函數(shù)從新的 cJSON 對象中獲取屬性,并將其輸出到控制臺上。
最后,我們使用 cJSON_Delete() 函數(shù)釋放以前創(chuàng)建的兩個 cJSON 對象,并使用 free() 函數(shù)釋放序列化后的 JSON 數(shù)據(jù)。