C JSON轉(zhuǎn)化List<>是一個常見的需求,特別是在使用C語言進(jìn)行后端開發(fā)時。List<>可以像數(shù)組一樣存儲多個數(shù)據(jù),并且支持動態(tài)擴(kuò)容和縮小,非常實(shí)用。在C語言中,我們可以使用第三方庫來實(shí)現(xiàn)JSON轉(zhuǎn)化List<>的功能。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <json-c/json.h> typedef struct json_object* JsonObject; typedef struct _Node { int val; struct _Node* Next; } ListNode; typedef struct _List { ListNode* Head; ListNode* Tail; } List; void InitList(List* list) { list->Head = NULL; list->Tail = NULL; } void FreeList(List* list) { ListNode* cur = list->Head; while (cur != NULL) { ListNode* temp = cur; cur = cur->Next; free(temp); } list->Head = NULL; list->Tail = NULL; } void PushBack(List* list, int val) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->val = val; node->Next = NULL; if (list->Head == NULL) { list->Head = node; list->Tail = node; } else { list->Tail->Next = node; list->Tail = node; } } List JsonToList(JsonObject arr) { List list; InitList(&list); int len = json_object_array_length(arr); for (int i = 0; i < len; i++) { JsonObject obj = json_object_array_get_idx(arr, i); int val = json_object_get_int(obj); PushBack(&list, val); } return list; } int main() { const char* jsonStr = "{ \"list\": [1, 2, 3, 4, 5] }"; JsonObject json = json_tokener_parse(jsonStr); JsonObject arr = json_object_object_get(json, "list"); List list = JsonToList(arr); ListNode* cur = list.Head; while (cur != NULL) { printf("%d ", cur->val); cur = cur->Next; } FreeList(&list); return 0; }
上面是通過第三方庫“json-c”實(shí)現(xiàn)的將JSON轉(zhuǎn)化成List<>的示例代碼。代碼中定義了一個ListNode和List結(jié)構(gòu)體來實(shí)現(xiàn)鏈表,同時使用了json-c庫中的API來解析JSON字符串和遍歷JSON數(shù)組。
最后,我們可以通過遍歷List<>來輸出其中的元素。