JSON格式的數據在Web開發中使用非常廣泛,它是一種輕量級的數據格式,易于解析和生成,不僅適用于前后端數據傳輸,也可以用于日志、配置文件等多種場景。在C語言中,我們可以使用開源的CJSON庫對JSON數據進行解析和生成。但是,在實際應用中,我們常常需要將JSON數據轉化為某種數據結構,例如List。
#include "cJSON.h" #include#include typedef struct ListNode { int val; struct ListNode *next; }ListNode; ListNode* createNode(int val) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->val = val; node->next = NULL; return node; } ListNode* jsonToList(char* jsonStr) { cJSON* root = cJSON_Parse(jsonStr); if (!root) { printf("JSON格式錯誤:%s\n", cJSON_GetErrorPtr()); return NULL; } int size = cJSON_GetArraySize(root); ListNode* head = NULL, *tail = NULL; for (int i = 0; i< size; i++) { cJSON* item = cJSON_GetArrayItem(root, i); if (!item) { printf("JSON格式錯誤:%s\n", cJSON_GetErrorPtr()); return NULL; } int val = cJSON_GetNumberValue(item); ListNode* node = createNode(val); if (!head) { head = node; tail = node; } else { tail->next = node; tail = node; } } cJSON_Delete(root); return head; } void printList(ListNode* head) { printf("["); ListNode* p = head; while (p) { printf("%d", p->val); if (p->next) printf(", "); p = p->next; } printf("]\n"); } int main() { char *jsonStr = "[1, 2, 3, 4, 5]"; ListNode* head = jsonToList(jsonStr); printList(head); return 0; }
在上面的代碼中,我們使用了CJSON庫解析了JSON字符串,然后循環遍歷JSON數組,將每個元素轉化為ListNode節點,并將其鏈接成List。最后,我們打印出List的結果。這個例子展示了如何將JSON數據轉化為List,但是同樣的方法也可以應用到其他數據結構中。