C語言中的鏈表(list)是一種非常重要和實用的數據結構。它可以幫助我們快速地管理數據,并且在需要時更加靈活地訪問和操作數據。JSON是一種常用的數據格式,類似于XML,但比XML更加簡潔和靈活。在這篇文章中,我們將介紹如何使用C語言的鏈表來調用和管理JSON格式的數據。
#include <stdio.h> #include <stdlib.h> #include <jansson.h> #include <string.h> typedef struct list_node{ json_t *data; struct list_node *next; }ListNode; typedef struct list{ ListNode *head; int length; }List; void init_list(List *list){ list->head = NULL; list->length = 0; } void insert_tail(List *list, json_t *data){ ListNode *new_node = (ListNode*)malloc(sizeof(ListNode)); new_node->data = data; new_node->next = NULL; if(list->head == NULL){ list->head = new_node; }else{ ListNode *p = list->head; while(p->next != NULL){ p = p->next; } p->next = new_node; } list->length++; } void free_list(List *list){ ListNode *p = list->head; while(p != NULL){ json_decref(p->data); ListNode *q = p->next; free(p); p = q; } list->head = NULL; list->length = 0; } json_t* get_element(List *list, int index){ if(index >= list->length || index< 0){ return NULL; } int i; ListNode *p = list->head; for(i = 0; i< index; i++){ p = p->next; } return p->data; } int main(){ const char *json_str = "{\"name\":\"Tom\",\"age\":18,\"sex\":\"male\"}"; json_t *root = json_loads(json_str, 0, NULL); if(!json_is_object(root)){ printf("Invalid JSON object.\n"); return -1; } List *list = (List*)malloc(sizeof(List)); init_list(list); insert_tail(list, json_object_get(root, "name")); insert_tail(list, json_object_get(root, "age")); insert_tail(list, json_object_get(root, "sex")); int i; for(i = 0; i< list->length; i++){ json_t *element = get_element(list, i); const char *key = json_string_value(json_object_iter_key(json_object_find(root, json_string_value(element)))); const char *value = json_string_value(element); printf("%s: %s\n", key, value); } free_list(list); json_decref(root); return 0; }
上面的代碼演示了如何使用鏈表來管理JSON數據。首先,我們使用json_loads函數從一個JSON字符串中加載數據,并將其存儲在一個json_t指針中。然后,我們初始化一個鏈表,并將JSON數據中的所有屬性插入到鏈表尾部。最后,我們可以使用get_element函數從鏈表中獲取元素,并使用json_string_value函數將JSON數據轉換為C字符串。
上一篇python 解壓7z
下一篇python 解定積分