C語言中,結構體是一種常用的數據類型,它可以存儲多個不同類型的數據。在很多場景下,我們需要將一個結構體序列化成JSON格式,便于在前后端之間傳遞數據。下面我們來看一下如何將C語言中的結構體序列化成JSON。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <jansson.h> typedef struct { int id; char name[20]; bool is_male; }Person; int main(int argc, char *argv[]) { Person p; p.id = 1; strcpy(p.name, "Tom"); p.is_male = true; json_t *root = json_object(); json_object_set_new(root, "id", json_integer(p.id)); json_object_set_new(root, "name", json_string(p.name)); json_object_set_new(root, "is_male", json_boolean(p.is_male)); char *json_str = json_dumps(root, JSON_INDENT(2)); printf("%s\n", json_str); free(json_str); json_decref(root); return 0; }
這里定義了一個Person結構體,包含id、name、is_male三個屬性。接下來使用json_object_set_new函數向一個json_t類型的對象中添加三個鍵值對,分別對應Person結構體的三個屬性,并使用json_dumps函數將該json_t對象序列化成JSON格式,并以兩個空格為縮進格式輸出。
在C語言中,使用第三方庫jansson可以方便地序列化JSON數據。json_t類型表示JSON值,包括對象、數組、字符串、數字、布爾值等。json_object_set_new函數用于向一個JSON對象中添加一個key-value對,其中key是一個字符串,value是一個json_t類型的值。
注意,輸出的JSON字符串需要在堆上分配內存,使用完需要手動釋放,因為json_dumps函數返回的指針是動態分配的。json_decref函數用于減小一個json_t對象的引用計數。
總之,結構體序列化成JSON是個常見的需求,在C語言中,使用jansson庫可以方便地實現。通過將結構體屬性轉換成JSON對象中的鍵值對,然后使用json_dumps函數序列化,可以得到格式良好的JSON字符串。