C語言與JSON的相互轉(zhuǎn)換需要用到第三方庫,我們這里使用cJSON這個(gè)庫來實(shí)現(xiàn)將JSON數(shù)組轉(zhuǎn)換成C語言中的list集合。
首先,在C語言中需要導(dǎo)入cJSON.h文件,可以通過以下代碼實(shí)現(xiàn):
#include "cJSON.h"
然后我們需要從JSON文件中讀取數(shù)組,轉(zhuǎn)換成cJSON中的json對象:
//從文件中讀取JSON內(nèi)容 FILE *fp = fopen("test.json", "rb"); fseek(fp, 0, SEEK_END); long filesize = ftell(fp); rewind(fp); char *content = (char *)malloc((filesize + 1) * sizeof(char)); fread(content, sizeof(char), filesize, fp); fclose(fp); //解析JSON cJSON *root = cJSON_Parse(content); free(content);
接下來,我們需要獲取JSON數(shù)組的長度,并遍歷數(shù)組中的所有元素,將元素添加到C語言的list集合中:
//獲取JSON數(shù)組長度 int length = cJSON_GetArraySize(root); //初始化list集合 list *lst = newList(); //遍歷JSON數(shù)組 for (int i = 0; i< length; i++) { //獲取JSON數(shù)組元素 cJSON *item = cJSON_GetArrayItem(root, i); //將元素添加到list集合中 int value = cJSON_GetNumberValue(item); addLast(lst, value); } //釋放JSON對象空間 cJSON_Delete(root);
最后,我們需要在代碼中定義list結(jié)構(gòu)體和其相關(guān)的操作函數(shù),如下所示:
typedef struct ListNode { int val; struct ListNode *next; } ListNode; typedef struct { ListNode *head; ListNode *tail; } list; list *newList() { list *lst = (list *)malloc(sizeof(list)); lst->head = NULL; lst->tail = NULL; return lst; } void addLast(list *lst, int val) { ListNode *node = (ListNode *)malloc(sizeof(ListNode)); node->val = val; node->next = NULL; if (lst->tail == NULL) { lst->head = node; lst->tail = node; } else { lst->tail->next = node; lst->tail = node; } }
這樣,我們就實(shí)現(xiàn)了將JSON數(shù)組轉(zhuǎn)換成C語言中的list集合。