欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c+json反序列化為list

林國瑞1年前8瀏覽0評論

C語言中的JSON庫cJSON可以方便地將JSON格式的字符串序列化為C語言中的對象,但是當JSON中包含多個相同類型的元素時,將其反序列化為C語言中的list就比較困難。下面我們介紹一種方法,使用cJSON和C語言的指針操作,將JSON反序列化為list。

#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>
// 定義存儲元素的結構體
typedef struct _Node {
int value;
struct _Node *next;
} Node;
// 定義函數,將JSON反序列化為list
Node *deserialize(const char *json) {
cJSON *root = cJSON_Parse(json);  // 解析JSON字符串
cJSON *array = cJSON_GetObjectItem(root, "array");  // 獲取JSON中的數組
Node *head = NULL, *tail = NULL;
int size = cJSON_GetArraySize(array);
for(int i=0; i<size; i++) {
cJSON *item = cJSON_GetArrayItem(array, i);
int value = cJSON_GetNumberValue(item);
Node *node = (Node *)malloc(sizeof(Node));  // 創建新的節點
node->value = value;
node->next = NULL;
if(tail) {  // 如果鏈表不為空,則將新節點添加到末尾
tail->next = node;
tail = node;
} else {  // 如果鏈表為空,則創建新鏈表
head = tail = node;
}
}
cJSON_Delete(root);  // 釋放JSON對象
return head;
}
int main() {
const char *json = "{ \"array\": [1, 2, 3, 4] }";
Node *head = deserialize(json);
Node *p = head;
while(p) {  // 遍歷鏈表,輸出結果
printf("%d ", p->value);
p = p->next;
}
printf("\n");
return 0;
}

在上述代碼中,我們使用cJSON庫中的cJSON_Parse函數將JSON字符串解析為JSON對象,然后使用cJSON_GetObjectItem函數獲取JSON對象中的數組,接著使用cJSON_GetArraySize和cJSON_GetArrayItem函數獲取數組的大小和數組中的元素,并創建新的節點,將元素添加至鏈表中。

值得注意的是,在創建節點時,我們使用了C語言中的malloc函數動態分配內存,確保了節點可以在函數調用結束后仍然存在;在釋放JSON對象時,我們使用了cJSON_Delete函數手動釋放內存,避免了內存泄漏。