欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c list 轉換json字符串數組

錢浩然1年前7瀏覽0評論

C List是一種常用的數據結構,它可以將一組數據組織成鏈表的形式。在實際開發中,我們通常需要將C List轉換成JSON字符串數組來傳輸、存儲或打印輸出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jansson.h>
#include <sys/queue.h>
struct data_s {
int id;
char name[32];
};
LIST_HEAD(list_s, data_s) g_list;
int main(int argc, char **argv)
{
LIST_INIT(&g_list);
struct data_s *pdata = (struct data_s *)calloc(1, sizeof(struct data_s));
pdata->id = 1;
strncpy(pdata->name, "Tom", sizeof(pdata->name));
LIST_INSERT_HEAD(&g_list, pdata, entries);
pdata = (struct data_s *)calloc(1, sizeof(struct data_s));
pdata->id = 2;
strncpy(pdata->name, "Jerry", sizeof(pdata->name));
LIST_INSERT_HEAD(&g_list, pdata, entries);
json_t *jarray = json_array();  
struct data_s *pdata_tmp = NULL;
LIST_FOREACH(pdata_tmp, &g_list, entries) {
json_t *jobj = json_object();     
json_object_set_new(jobj, "id", json_integer(pdata_tmp->id));
json_object_set_new(jobj, "name", json_string(pdata_tmp->name));
json_array_append(jarray, jobj);
}
char *json_str = json_dumps(jarray, JSON_INDENT(4));
printf("%s\n", json_str);
json_decref(jarray);
free(json_str);
pdata_tmp = NULL;
LIST_FOREACH(pdata_tmp, &g_list, entries) {
LIST_REMOVE(pdata_tmp, entries);
free(pdata_tmp);
}
LIST_INIT(&g_list);   
return 0;
}

代碼中,我們首先初始化一個C List,然后插入兩個數據節點,并將C List轉換成JSON字符串數組。我們利用jansson庫提供的API,先創建JSON數組對象jarray,然后遍歷C List,將每個數據節點轉換成JSON對象jobj,并將jobj添加到jarray中。最后調用json_dumps將jarray轉成字符串數組json_str,并打印輸出。

最后,我們需要釋放JSON數組對象和C List節點所占用的內存。需要注意的是,因為我們在遍歷C List時使用了LIST_FOREACH宏,所以在釋放節點的時候也需要使用LIST_REMOVE宏。