關于C語言結構體編碼JSON的文章
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數據交換格式,易于閱讀和編寫,也易于機器解析和生成。通過結合C語言的結構體,可以輕松地將結構體數據編碼成JSON格式,方便數據傳輸和存儲。
首先,需要使用第三方庫進行JSON編解碼。其中比較常用的庫有cJSON和Jansson。這里以cJSON為例。
#include "cJSON.h"
typedef struct {
int num;
double score;
char name[20];
} Student;
int main() {
Student student = { 123, 99.5, "Tom" };
cJSON *root_json = cJSON_CreateObject();
cJSON_AddNumberToObject(root_json, "num", student.num);
cJSON_AddNumberToObject(root_json, "score", student.score);
cJSON_AddStringToObject(root_json, "name", student.name);
char *json_str = cJSON_PrintUnformatted(root_json);
printf("%s\n", json_str);
cJSON_Delete(root_json);
free(json_str);
return 0;
}
以上代碼實現了一個學生信息結構體的JSON編碼。首先創建一個空的JSON對象cJSON_CreateObject(),然后調用cJSON_AddXXXToObject()系列函數將結構體中的數據添加到JSON對象中。最后使用cJSON_PrintUnformatted()函數得到JSON字符串。
當然,以上代碼只能實現結構體的JSON編碼,如果需要進行JSON解碼,則需要使用cJSON_Parse()函數進行解析,代碼如下:
// 假設有以下JSON字符串
char *json_str = "{ \"num\":123, \"score\":99.5, \"name\":\"Tom\" }";
// 解析JSON字符串
cJSON *root_json = cJSON_Parse(json_str);
// 獲取JSON中的數據
int num = cJSON_GetObjectItem(root_json, "num")->valueint;
double score = cJSON_GetObjectItem(root_json, "score")->valuedouble;
char *name = cJSON_GetObjectItem(root_json, "name")->valuestring;
// 打印結構體中的數據
printf("num=%d, score=%.1f, name=%s\n", num, score, name);
cJSON_Delete(root_json);
free(json_str);
以上代碼實現了結構體數據的JSON解碼。首先使用cJSON_Parse()函數解析JSON字符串,然后通過cJSON_GetObjectItem()函數獲取JSON對象中的數據,并轉換成對應的C語言類型,最后打印出來。
總體來說,利用C語言的結構體編碼JSON,可以實現數據的快速傳輸和存儲,方便實用。