C JSON序列化和反序列化是現代編程中經常用到的技術。C語言作為一種高性能計算機語言,使用C JSON序列化和反序列化技術可以方便地將結構體等復雜數據類型轉換為JSON格式的字符串,以便于網絡傳輸或存儲。
在C語言中,一般使用第三方庫來進行JSON序列化和反序列化操作。常用的JSON庫有:
- cJSON - Jansson - JSON-C
其中,cJSON是比較輕量級的JSON庫,具有體積小、速度快等特點。下面以cJSON為例,介紹C JSON序列化和反序列化的使用方法:
首先需要在代碼中包含cJSON庫頭文件:
#include "cJSON.h"
然后定義需要轉換的結構體:
typedef struct student { char name[20]; int age; char address[50]; } Student;
接下來,將需要轉換的結構體按照JSON格式創建一個cJSON對象,并將需要轉換的數據賦值給該對象:
Student stu = {"Tom", 18, "China Beijing"}; cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", stu.name); cJSON_AddNumberToObject(root, "age", stu.age); cJSON_AddStringToObject(root, "address", stu.address);
最后將cJSON對象轉換成JSON格式的字符串:
char *jsonStr = cJSON_Print(root); printf("JSON string:\n%s\n", jsonStr);
反序列化就是將JSON格式的字符串轉換成C語言數據類型。同樣地,先將JSON格式的字符串解析成cJSON對象,然后獲取對應的數據:
cJSON *json = cJSON_Parse(jsonStr); if (json != NULL) { const cJSON *name = cJSON_GetObjectItem(json, "name"); const cJSON *age = cJSON_GetObjectItem(json, "age"); const cJSON *address = cJSON_GetObjectItem(json, "address"); Student stu2; strcpy(stu2.name, name->valuestring); stu2.age = age->valueint; strcpy(stu2.address, address->valuestring); printf("Deserialize a student:\n"); printf("Name=%s, Age=%d, Address=%s\n", stu2.name, stu2.age, stu2.address); } cJSON_Delete(json);
注意:使用完cJSON對象之后需要調用cJSON_Delete函數進行內存釋放。
上一篇python 故事書
下一篇python 放入列表