C語(yǔ)言是一種被廣泛使用的計(jì)算機(jī)編程語(yǔ)言,在日常編程中我們經(jīng)常需要將JSON數(shù)據(jù)轉(zhuǎn)化為L(zhǎng)ist對(duì)象,以便后續(xù)的操作。借助 cJSON 這個(gè)開(kāi)源庫(kù),我們可以很方便地實(shí)現(xiàn)這一功能。
/* * 本例子展示了如何將JSON數(shù)據(jù)轉(zhuǎn)化為L(zhǎng)ist對(duì)象。 */ #include#include #include #include "cJSON.h" #define MAX_JSON_SIZE 1024 typedef struct list_node { char* data; struct list_node* next; } list_node_t; void list_push(list_node_t* head, cJSON* value) { while (head->next) { head = head->next; } head->next = (list_node_t*)malloc(sizeof(list_node_t)); head = head->next; head->data = cJSON_PrintUnformatted(value); head->next = NULL; } list_node_t* json_to_list(cJSON* root) { if (cJSON_IsArray(root)) { list_node_t* head = (list_node_t*)malloc(sizeof(list_node_t)); head->next = NULL; int i; for (i = 0; i< cJSON_GetArraySize(root); i++) { cJSON* value = cJSON_GetArrayItem(root, i); list_push(head, value); } return head; } return NULL; } int main() { char test_json[MAX_JSON_SIZE] = "[{\"name\":\"Tom\",\"age\":20},{\"name\":\"Jack\",\"age\":22}]"; cJSON* root = cJSON_Parse(test_json); list_node_t* head = json_to_list(root); list_node_t* current = head; while (current) { printf("%s\n", current->data); current = current->next; } cJSON_Delete(root); return 0; }
以上代碼展示了如何將JSON數(shù)據(jù)轉(zhuǎn)化為L(zhǎng)ist對(duì)象,并打印List中的每一個(gè)元素。需要注意的是,cJSON庫(kù)需要我們?cè)谑褂猛曛笫謩?dòng)刪除分配的內(nèi)存。