色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json反序列化為list

黃文隆2年前8瀏覽0評論

JSON是輕量級數據交換格式的一種,C語言中的JSON庫可以方便地實現JSON數據的解析與生成。 在C語言中如何將JSON數據反序列化為鏈表呢?下面我們來一步步學習。

首先,我們需要在代碼中引入json-c庫的頭文件:

#include<json-c/json.h>

接下來,我們需要定義一個鏈表結構體,例如:

struct Student {
int id;
char name[20];
struct list_head list;
};

鏈表結構體中,我們可以定義一些我們需要的屬性,比如id和name。list是Linux kernel中定義的一個數據結構,用于實現雙向循環鏈表的操作。

然后,在代碼中定義一個JSON對象,例如:

char *json_string = "{\"students\":[{\"id\": 1,\"name\":\"Alice\"},{\"id\":2,\"name\":\"Bob\"}]}";
struct json_object *json_obj = json_tokener_parse(json_string);
struct json_object *students_object;
json_object_object_get_ex(json_obj, "students", &students_object);

在這個JSON對象中,我們首先需要提取出students這個數組,然后對每個數組元素進行遍歷,進行數據的解析。

接下來,我們可以定義一個鏈表頭來存儲解析后的數據:

struct list_head students_list;
INIT_LIST_HEAD(&students_list);

接下來,我們就可以對students數組中的每一個元素進行遍歷,將數據解析后插入到鏈表中了:

int array_len = json_object_array_length(students_object);
for(int i = 0; i < array_len; i++) {
struct json_object * student_json = json_object_array_get_idx(students_object, i);
struct json_object *id_object, *name_object;
json_object_object_get_ex(student_json, "id", &id_object);
json_object_object_get_ex(student_json, "name", &name_object);
struct Student * student = (struct Student *)malloc(sizeof(struct Student));
student->id = json_object_get_int(id_object);
strcpy(student->name, json_object_get_string(name_object));
list_add(&(student->list), &students_list);
}

最后,我們將解析后的鏈表進行遍歷,查看數據是否解析成功了:

struct Student *student_item;
struct list_head *pos, *next;
list_for_each_safe(pos, next, &students_list) {
student_item = list_entry(pos, struct Student, list);
printf("id: %d, name: %s\n", student_item->id, student_item->name);
list_del(pos);
free(student_item);
}

這樣,就可以很方便地將JSON數據反序列化為鏈表了。