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

c json反序列化list

老白2年前9瀏覽0評論

C語言中,JSON反序列化是指將JSON格式的數據轉換為對應的C語言數據類型。若JSON格式中包含了列表類型,那么在反序列化時就需要將JSON數組轉換為C語言中的數組或鏈表等數據結構。

例如,假設我們有以下JSON格式的數據:
{
"fruits": [
{
"name": "apple",
"color": "red"
},
{
"name": "banana",
"color": "yellow"
}
]
}
我們想要將其中的“fruits”數組轉換為C語言中的鏈表數據結構,代碼如下:
#include <stdio.h>
#include <jansson.h>
typedef struct _fruit {
char *name;
char *color;
struct _fruit *next;
} Fruit;
int main() {
const char *json_str = "{\"fruits\": [{\"name\": \"apple\", \"color\": \"red\"}," 
"{\"name\":\"banana\", \"color\":\"yellow\"}]}";
json_error_t error;
json_t *root = json_loads(json_str, 0, &error);
if (!root) {
fprintf(stderr, "error: on line %d: %s\n", error.line, error.text);
return 1;
}
json_t *fruits_arr = json_object_get(root, "fruits");
size_t index;
json_t *value;
Fruit *head = NULL;
Fruit *curr = NULL;
json_array_foreach(fruits_arr, index, value) {
Fruit *tmp = calloc(1, sizeof(Fruit));
tmp->name = strdup(json_string_value(json_object_get(value, "name")));
tmp->color = strdup(json_string_value(json_object_get(value, "color")));
if (!head) {
head = tmp;
curr = tmp;
} else {
curr->next = tmp;
curr = curr->next;
}
}
// 遍歷鏈表
curr = head;
while (curr) {
printf("name: %s\tcolor: %s\n", curr->name, curr->color);
curr = curr->next;
}
// 釋放內存
curr = head;
while (curr) {
Fruit *tmp = curr->next;
free(curr->name);
free(curr->color);
free(curr);
curr = tmp;
}
json_decref(root);
return 0;
}

以上代碼使用了jansson庫來實現JSON的反序列化。首先通過“json_loads”函數將JSON字符串轉換為jansson庫中的“json_t”類型對象,然后使用“json_object_get”函數獲取“fruits”數組對象,之后通過“json_array_foreach”遍歷數組中的元素,并將其轉換為“Fruit”結構體類型。

最后,對于鏈表的遍歷和內存釋放,我們也可以使用其他的方式,如遞歸或待釋放元素鏈表等方法。