關(guān)于C語言結(jié)構(gòu)體編碼JSON的文章
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數(shù)據(jù)交換格式,易于閱讀和編寫,也易于機器解析和生成。通過結(jié)合C語言的結(jié)構(gòu)體,可以輕松地將結(jié)構(gòu)體數(shù)據(jù)編碼成JSON格式,方便數(shù)據(jù)傳輸和存儲。
首先,需要使用第三方庫進行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;
}
以上代碼實現(xiàn)了一個學(xué)生信息結(jié)構(gòu)體的JSON編碼。首先創(chuàng)建一個空的JSON對象cJSON_CreateObject(),然后調(diào)用cJSON_AddXXXToObject()系列函數(shù)將結(jié)構(gòu)體中的數(shù)據(jù)添加到JSON對象中。最后使用cJSON_PrintUnformatted()函數(shù)得到JSON字符串。
當(dāng)然,以上代碼只能實現(xiàn)結(jié)構(gòu)體的JSON編碼,如果需要進行JSON解碼,則需要使用cJSON_Parse()函數(shù)進行解析,代碼如下:
// 假設(shè)有以下JSON字符串
char *json_str = "{ \"num\":123, \"score\":99.5, \"name\":\"Tom\" }";
// 解析JSON字符串
cJSON *root_json = cJSON_Parse(json_str);
// 獲取JSON中的數(shù)據(jù)
int num = cJSON_GetObjectItem(root_json, "num")->valueint;
double score = cJSON_GetObjectItem(root_json, "score")->valuedouble;
char *name = cJSON_GetObjectItem(root_json, "name")->valuestring;
// 打印結(jié)構(gòu)體中的數(shù)據(jù)
printf("num=%d, score=%.1f, name=%s\n", num, score, name);
cJSON_Delete(root_json);
free(json_str);
以上代碼實現(xiàn)了結(jié)構(gòu)體數(shù)據(jù)的JSON解碼。首先使用cJSON_Parse()函數(shù)解析JSON字符串,然后通過cJSON_GetObjectItem()函數(shù)獲取JSON對象中的數(shù)據(jù),并轉(zhuǎn)換成對應(yīng)的C語言類型,最后打印出來。
總體來說,利用C語言的結(jié)構(gòu)體編碼JSON,可以實現(xiàn)數(shù)據(jù)的快速傳輸和存儲,方便實用。